我如何建议拆分整数?

时间:2013-06-05 07:56:42

标签: java regex split spaces

我正在尝试在数字之间添加空格,但结果有些数字会分裂而其他数字有时会丢失。

代码:

String line = "321HELLO how do you do? $ah213 -20d1001x";
line = line.replaceAll("([^d]?)([\\d\\.]+)([^d]?)", "$1 $2 $3");
System.out.println(line);

结果:

3 21 HELLO how do "you" do? $ah 213  - 2 0 d1 001 x

规则:

无论多大的整数都不会在很多地方分裂。 $ +数字($ 123)或$ +字母+数字($ abc123)之前不要添加空格数字之后。 字母+数字=将其分开。

通缉结果:

321 HELLO how do "you" do? $ah213 -20 d 1001 x

1 个答案:

答案 0 :(得分:3)

正则表达式中的一个小错误:[^d]应为[^\\d],否则您将检查字符d而不是字符类\d

但是它仍然插入太多空格,我真的没有办法用你当前的正则表达式来避免这种情况。

有效的方法:

String line = "321HELLO how do you do? $ah213 -20d1001x";
line = line.replaceAll("(?<=[-\\d.])(?=[^\\s-\\d.])|(?<!\\$[a-z]{0,1000})(?<=[^\\s-\\d.])(?=[-\\d.])", " ");
System.out.println(line);

打印:

321 HELLO how do you do? $ah213 -20 d 1001 x

<强>解释

[-\\d.]是我认为你将其归类为“数字的一部分”(尽管单独.将被视为一个数字,这可能是不可取的)(你不需要在.)内逃避[] (?<=...)是积极的后视,意味着之前的字符与模式匹配 (?=...)是正向前瞻,意味着下一个字符与模式匹配 (?<!...)是负面的后瞻,意味着之前的字符与模式不匹配。

所以基本上每当你到达一个数字而不是数字之间的转换点的地方时,插入一个空格(如果还不存在)。每当有$后跟0-1000(不能在后面使用*)字母时,负面的后视会阻止插入空格(将阻止空格{{1 }和$123)。

Java regex reference

附加说明:

原来你根本不需要$ah123,这可以定期匹配。

?<=