如何输入"。"每个"之前有2个空格,"在Java字符串中

时间:2016-11-01 12:31:08

标签: java regex

我的Java项目中有一个字符串,看起来像这样 9201,92710,94500,920,1002

如何在逗号前输入2个点?所以它看起来像 这样的:
920.1,9271.0,9450.0,92.0,100.2

我尝试了它,但我无法得到最后一个数字来获得一个点。

numbers = numbers.replaceAll("([0-9],)", "\\.$1");

我得到的结果是 920.1,9271.0,9450.0,92.0,1002

注意:字符串的长度并不总是相同。它可以更长/更短。

6 个答案:

答案 0 :(得分:2)

  1. 检查字符串是否以","结尾。如果没有,请追加","到字符串,运行相同的replaceAll,删除","来自String的结尾。
  2. 按","拆分字符串分隔符,处理每个部分添加"。"需要的地方。
  3. 只需添加"。"在numbers.length-1解决最后一个数字的问题

答案 1 :(得分:2)

由于您的问题不仅是在每个逗号之前插入点,而且在字符串结尾之前还插入,您只需将此附加条件添加到捕获组:< / p>

numbers = numbers.replaceAll("([0-9](,|$))", "\\.$1");

正如Siguza所建议的那样,您也可以使用非捕获组,这更像是人类在捕获组中捕获的内容:

numbers = numbers.replaceAll("([0-9](?:,|$))", "\\.$1");

但是作为一个非捕获组(虽然是一个非常好的功能)而不是标准的Regex并且开销在这里并不重要,我建议使用第一个选项。

答案 2 :(得分:1)

你可以使用单词边界:

numbers = numbers.replaceAll("(\\d)\b", ".$1");

答案 3 :(得分:1)

你的解决方案很好,只要你像丹所说的那样在最后放一个逗号。 所以而不是:

numbers = numbers.replaceAll("([0-9],)", "\\.$1");

写:

numbers = (numbers+",").replaceAll("([0-9],)", "\\.$1");
numbers = numbers.substring(0,numbers.size()-1);

答案 4 :(得分:1)

您可以使用正向前瞻来检查整个匹配的数字和第0个反向引用之后的,或字符串结尾:

String s = "9201,92710,94500,920,1002";
System.out.println(s.replaceAll("\\d(?=,|$)", ".$0"));
// => 920.1,9271.0,9450.0,92.0,100.2

请参阅Java demoregex demo

<强>详情

  • \\d - 正好是1位数......
  • (?=,|$) - 必须在,或字符串结尾($)之前。

捕捉变异(Java demo):

String s = "9201,92710,94500,920,1002";
System.out.println(s.replaceAll("(\\d)(,|$)", ".$1$2"));

答案 5 :(得分:1)

你有权使用replaceAll方法。但是你的正则表达式不匹配字符串的结尾,即最后一组数字。

以下是我对你的问题的看法:

  public static void main(String[] args) {
    String numbers = "9201,92710,94500,920,1002";
    System.out.println(numbers.replaceAll("(\\d,|\\d$)", ".$1"));
  }

正则表达式(\\d,|\\d$)匹配数字后跟逗号\d,,或|数字后跟字符串\d$的结尾。 我测试了它并发现它可以工作。

正如其他人建议你可以在最后添加一个逗号,运行全部替换然后将其删除。但这似乎是额外的努力。 例如:

  public static void main(String[] args) {
    String numbers = "9201,92710,94500,920,1002";
    //add on the comma
    numbers += ",";

    numbers = numbers.replaceAll("(\\d,)", "\\.$1");

    //remove the comma
    numbers = numbers.substring(0, numbers.length()-1);
    System.out.println(numbers);
  }