使用String.replace替换用逗号分隔的数字("","");

时间:2014-07-23 11:06:02

标签: java regex

我有一个字符串,如下所示:

年龄13,000,000岁

现在我想将数字转换成英文单词,我有一个功能准备就绪,但是在这种情况下我发现检测原始数字(13,000,000)的问题,因为它用逗号分隔。

目前我正在使用以下正则表达式来检测字符串中的数字:

stats = stats.replace((".*\\d.*"), (NumberToWords.start(Integer.valueOf(notification_data_greet))));

但上述似乎不起作用,有什么建议吗?

4 个答案:

答案 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