Cố gắng xóa tất cả các chữ cái và ký tự không phải là 0-9 và một khoảng thời gian. Tôi đang sử dụng Character.isDigit()
nhưng nó cũng loại bỏ số thập phân, làm thế nào tôi cũng có thể giữ số thập phân?
Cố gắng xóa tất cả các chữ cái và ký tự không phải là 0-9 và một khoảng thời gian. Tôi đang sử dụng Character.isDigit()
nhưng nó cũng loại bỏ số thập phân, làm thế nào tôi cũng có thể giữ số thập phân?
Câu trả lời:
Hãy thử mã này:
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
Bây giờ str
sẽ chứa "12.334.78"
.
[^\\d.-]
"1233478"
, không chính xác.
Tôi sẽ sử dụng một regex.
String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
in
2367.2723
Bạn có thể muốn giữ -
tốt cho các số âm.
^
và .
có nghĩa trong tuyên bố này?
[^
phương tiện không những nhân vật này và bên trong một []
một .
chỉ là một.
.
chỉ là một a
và không có nghĩa gì cả, tôi có thể thoát khỏi nó không?
.
kết quả.
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");
kết quả: 0097-557890-999
nếu bạn cũng không cần "-" trong Chuỗi, bạn có thể làm như thế này:
String phoneNumberstr = "Tel: 00971-55 7890 999";
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");
kết quả: 0097557890999
Với ổi:
String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);
xem http://code.google.com.vn/p/guava-lologists/wiki/StringsExplained
str = str.replaceAll("\\D+","");
printf()
là bản sao. Ngoài ra nếu bạn thấy câu trả lời trong bình luận, bạn có thể yêu cầu mod chuyển đổi nó thành câu trả lời hoặc thậm chí tự thêm câu trả lời - câu trả lời trong các bình luận không được khuyến khích trên StackOverlow.
Cách đơn giản mà không cần sử dụng Regex:
Thêm một kiểm tra ký tự bổ sung cho dấu chấm '.'
sẽ giải quyết yêu cầu:
public static String getOnlyNumerics(String str) {
if (str == null) {
return null;
}
StringBuffer strBuff = new StringBuffer();
char c;
for (int i = 0; i < str.length() ; i++) {
c = str.charAt(i);
if (Character.isDigit(c) || c == '.') {
strBuff.append(c);
}
}
return strBuff.toString();
}
Một cách để thay thế nó bằng một luồng java 8:
public static void main(String[] args) throws IOException
{
String test = "ab19198zxncvl1308j10923.";
StringBuilder result = new StringBuilder();
test.chars().mapToObj( i-> (char)i ).filter( c -> Character.isDigit(c) || c == '.' ).forEach( c -> result.append(c) );
System.out.println( result ); //returns 19198.130810923.
}
Dấu tách thập phân tiền tệ có thể khác nhau từ Địa điểm khác. Nó có thể nguy hiểm để coi .
như là dải phân cách luôn. I E
╔════════════════╦═══════════════════╗
║ Currency ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
Tôi nghĩ rằng cách thích hợp là:
DecimalFormatSymbols
Locale mặc định hoặc một ký tự được chỉ định.Và đây là cách tôi giải quyết nó:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
mã:
public static String getDigit(String quote, Locale locale) {
char decimalSeparator;
if (locale == null) {
decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
} else {
decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
}
String regex = "[^0-9" + decimalSeparator + "]";
String valueOnlyDigit = quote.replaceAll(regex, "");
try {
return valueOnlyDigit;
} catch (ArithmeticException | NumberFormatException e) {
Log.e(TAG, "Error in getMoneyAsDecimal", e);
return null;
}
return null;
}
Tôi hy vọng điều đó có thể giúp đỡ, '.
Dành cho những người dùng Android đến đây cho Kotlin
val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")
Đầu ra:
cleanString = "12345.67"
Điều này sau đó có thể được chuyển đổi một cách an toàn toDouble()
, toFloat()
hoặc toInt()
nếu cần
Điều này xử lý các đầu vào null, số âm và số thập phân (bạn cần bao gồm thư viện Apache Commons Lang, phiên bản 3.8 trở lên, trong dự án của bạn):
import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");
Tài liệu tham khảo: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html