Java 如何建议拆分整数?

Java 如何建议拆分整数?,java,regex,split,spaces,Java,Regex,Split,Spaces,我试图在数字之间添加空格,但结果是一些数字被拆分,而另一些数字有时会丢失 代码: 结果: 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 正则表达式中的一个小错误:[^d]应该是[^\\

我试图在数字之间添加空格,但结果是一些数字被拆分,而另一些数字有时会丢失

代码:

结果:

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

正则表达式中的一个小错误:
[^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);
说明:

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);
[-\\d.]
是我假定您将其归类为“数字的一部分”(虽然单独的
会被视为数字,这可能并不需要)(您不需要在
[]
中转义
)。
(?$
后跟0-1000(不能在“后看”中使用
*
)字母(将阻止使用
$123
$ah123
的空格)

附加说明:

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);

原来你并不真的需要
?为什么这里没有空格
$ah213
,这段代码是如何形成的
D1001 x
?我的意思是我希望它是
D1001 x
?@HamZa,你的逻辑解释是正确的,因为我没有给出足够的信息。添加了更多信息,抱歉。刚才添加了解释为什么不应该为第二个正则表达式分隔
$ah213
@user1768615?不。括号中的组/事物只有
([-\\d.])
([^\\s-\\d.])
(环顾四周不是捕获组)。请注意,由于
|
,只会填充其中一个,但如果未填充组,则该组将为空,因此可以同时添加这两个组。在正则表达式匹配的字符串部分(已选中但未包含)中不包含前瞻,因此不需要/无法替换它们。
replaceAll("([-\\d.])(?=[^\\s-\\d.])|(?<!\\$[a-z]{0,1000})([^\\s-\\d.])(?=[-\\d.])", "$1$2 ")