如何将逗号插入包含其他单词字符串的数字中

时间:2012-01-09 02:02:37

标签: java string insert numbers divide

我有String,如下所示:

"The answer is 1000"

我想在不破坏String的其余部分的情况下在数字1000中插入逗号。

注意:我也想将此用于其他String不同长度的substring(int index),因此不会建议regex获取该号码。

我能想到的最好的方法是使用{{1}}命令,但我不知道如何。

提前致谢!

3 个答案:

答案 0 :(得分:5)

以下格式化所有非十进制数字:

public String formatNumbers(String input) {
  Pattern p = Pattern.compile("\\d+");
  Matcher m = p.matcher(input);
  NumberFormat nf = NumberFormat.getInstance();        
  StringBuffer sb = new StringBuffer();
  while(m.find()) {
    String g = m.group();
    m.appendReplacement(sb, nf.format(Double.parseDouble(g)));            
  }
  return m.appendTail(sb).toString();
}

e.g。如果你打电话:formatNumbers("The answer is 1000 1000000")

结果是:"The answer is 1,000 1,000,000"

请参阅:NumberFormatMatcher.appendReplacement()

答案 1 :(得分:1)

Most efficient way to extract all the (natural) numbers from a string修改:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {

private static final String REGEX = "\\d+";

public static void main(String[] args) {
    String input = "dog dog 1342 dog doggie 2321 dogg";
    Pattern p = Pattern.compile(REGEX);
    Matcher m = p.matcher(input); // get a matcher object
    int end = 0;
    String result = "";
    while (m.find()) {
        result = result + input.substring(end, m.start());
        result = result
                + addCommas(
                        input.substring(
                                m.start(), m.end()));
        end = m.end();
    }
    System.out.println(result);
}

private static String addCommas(String s) {
    char[] c = s.toCharArray();
    String result = "";
    for (int i = 0; i < s.length(); i++) {
        if (s.length() % 3 == i % 3)
            result += ",";

        result += c[i];
    }
    return result;
}

}

答案 2 :(得分:0)

您可以使用正则表达式:

[0-9]+

要查找连续的数字集,因此它会匹配1000750022387234等。您可以在http://regexpal.com/上对此进行测试处理涉及小数点的数字的情况,BTW。

这不是一个完整的代码答案,但基本算法如下:

  • 您可以使用该模式查找字符串中匹配项的索引(各种匹配项开始的字符的索引)
  • 从每个索引中,将数字复制到一个临时字符串中,该字符串包含 字符串中数字的数字
  • 你编写一个从String结尾处开始的函数,并且对于每个第3个数字(从结尾开始),你在它之前插入一个逗号,除非当前字符的索引是0(这将阻止300被转变为,300
  • 使用replace()方法
  • 将源字符串中的原始数字替换为逗号字符串