我有一个字符串列表,如果模式匹配,我想将它们转换为 float 。
以下是一些值和预期结果:
1000 -> 1000.0
1.000 -> 1000.0
1.000,000 -> 1000.0
-1.000,000 -> -1000.0
9,132 -> 9.132
1,000.00 -> invalid
30.10.2010 -> invalid
1,000.000,00 -> invalid
我尝试使用此代码来检查数字是否有效,但模式从未匹配:
Pattern pattern = Pattern.compile("#.###,###");
for(String s : list){
Matcher m = pattern.matcher(s);
if(m.matches()){
//convert
}
}
除此之外,我还尝试使用此代码:
DecimalFormat df = (DecimalFormat) NumberFormat.getCurrencyInstance();
for(String s : list){
try {
Number num = df.parse(s);
//..
} catch (ParseException e) {
}
}
此代码的问题是,没有执行基于模式的验证。例如。像 2012/05/30
这样的日期会转换为 2012
。
那么我如何定义一个有效的模式或配置 DecimalFormat
以满足我的需要?
最佳答案
Pattern
类使用正则表达式。您可能想要这个:
Pattern pattern = Pattern.compile("-?\d\.\d{1,3}(,\d{1,3})?");
您可能需要根据您想要或不想要匹配的格式来调整此正则表达式。
关于java - 如何将格式化字符串转换为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10906522/