我的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
注意:字符串的长度并不总是相同。它可以更长/更短。
答案 0 :(得分:2)
答案 1 :(得分:2)
由于您的问题不仅是在每个逗号之前插入点,而且在字符串结尾之前还插入,您只需将此附加条件添加到捕获组:< / p>
正如Siguza所建议的那样,您也可以使用非捕获组,这更像是人类在捕获组中捕获的内容: 但是作为一个非捕获组(虽然是一个非常好的功能)而不是标准的Regex并且开销在这里并不重要,我建议使用第一个选项。numbers = numbers.replaceAll("([0-9](,|$))", "\\.$1");
numbers = numbers.replaceAll("([0-9](?:,|$))", "\\.$1");
答案 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 demo和regex 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);
}