我有一个字符串,如下所示:
年龄13,000,000岁
现在我想将数字转换成英文单词,我有一个功能准备就绪,但是在这种情况下我发现检测原始数字(13,000,000)的问题,因为它用逗号分隔。
目前我正在使用以下正则表达式来检测字符串中的数字:
stats = stats.replace((".*\\d.*"), (NumberToWords.start(Integer.valueOf(notification_data_greet))));
但上述似乎不起作用,有什么建议吗?
答案 0 :(得分:2)
尝试使用以下正则表达式匹配逗号分隔数字
\d{1,3}(,\d{3})+
将最后一部分设为可选,以匹配未用逗号分隔的数字
\d{1,3}(,\d{3})*
答案 1 :(得分:2)
试试这个正则表达式:
[0-9][0-9]?[0-9]?([0-9][0-9][0-9](,)?)*
这匹配每个1000用逗号分隔的数字。因此它将匹配
10,000,000
但不是
10,1,1,1
答案 2 :(得分:2)
您可以在DecimalFormat
的帮助下而不是正则表达式
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance();
System.out.println(format.parse("10,000,000"));
答案 3 :(得分:2)
您需要使用允许逗号的RegEx来提取数字。我现在能想到的最强大的是
\d{1,3}(,?\d{3})*
Wich匹配任何未签名的整数,包括正确放置的逗号和没有逗号(以及其奇怪的组合,如100,000000)
然后用空字符串替换匹配中的所有,
,你可以照常解析:
Pattern p = Pattern.compile("\\d{1,3}(,?\\d{3})*"); // You can store this as static final
Matcher m = p.matcher(input);
while (m.find()) { // Go through all matches
String num = m.group().replace(",", "");
int n = Integer.parseInt(num);
// Do stuff with the number n
}
工作示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws InterruptedException {
String input = "1,300,000,000";
Pattern p = Pattern.compile("\\d{1,3}(,?\\d{3})*"); // You can store this as static final
Matcher m = p.matcher(input);
while (m.find()) { // Go through all matches
String num = m.group().replace(",", "");
System.out.println(num);
int n = Integer.parseInt(num);
System.out.println(n);
}
}
}
提供输出
1300000000
1300000000