本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>
提问:如何实现Java字符串删除所有非数字字符,但保留小数点分隔符
尝试删除所有非0-9和一个句点的字母和字符。我正在使用,Character.isDigit()但它也会删除小数点,如何还保留小数点?
回答1:
试试以下代码:
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
输出为12.334.78
回答2:
我会通过正则表达式解决问题:
String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
回答3:
不使用正则表达式的简单方法:
为点添加额外的字符检查'.'将解决以下要求:
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();
}
实战回答
货币小数点分隔符可以与区域设置不同。.始终将其视为分隔符可能很危险。
╔════════════════╦═══════════════════╗
║ Locale ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
我认为正确的方法是:
1, DecimalFormatSymbols通过默认的Locale或指定的Locale获取十进制字符。
2, 用十进制字符借助正则表达式,以便仅获取数字
接下来是我的具体代码实现部分:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
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;
}