我有一个代表计数“1,125,854”的字符串。
我想检查每千位小数后是否存在“,”。
e.g。 125,854和1,125,854
我写了以下代码
import java.text.DecimalFormat;
import java.text.Format;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
public class CountComma {
public static void main(String[] args) {
String str = "1,125,854";
int count = 0;
String revStr = new StringBuilder(str).reverse().toString();
System.out.println("Reverse String: " + revStr);
List<Integer> format = new ArrayList<Integer>();
for (char ch : revStr.toCharArray()) {
System.out.println(ch);
if (ch == ',') {
count = count + revStr.indexOf(ch);
format.add(count);
}
}
System.out.println("Count: " + count);
System.out.println(format.toString());
}
}
This code gives output :
Reverse String: 458,521,1
4
5
8
,
5
2
1
,
1
Count: 6
[3, 6]
有人可以建议更好的方法吗?
由于
答案 0 :(得分:5)
如果您只想检查一个数字字符串是否具有正确的逗号格式,那么您可以使用这个单行:
String str = "1,125,854";
boolean isCorrect = str.matches("\\d{1,3}(,\\d{3})*");
<强>更新强>
如果您想使正则表达式更多地与区域设置无关,您可以首先根据当前区域设置获取数千个分组分隔符。例如,如果在servlet中执行此检查,您可以尝试这样做:
Locale currentLocale = httpServletRequest.getLocale();
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(currentLocale);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
char separator = symbols.getGroupingSeparator();
然后
boolean isCorrect = str.matches("\\d{1,3}(" + separator + "\\d{3})*");
答案 1 :(得分:0)
您可以使用RegEx(此处的教程:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html)。
(\d{1,3})(,(\d{3}))*
(修正我的答案,正如Robin Koch所指出的那样)
答案 2 :(得分:0)
您应该使用正确的语言环境使用NumberFormat: https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html 或采用模式的DecimalFormat构造函数: https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html#DecimalFormat-java.lang.String-
当字符串与格式不匹配时,parse方法将抛出ParseException。