需要在java中将字符串拆分为两部分

Red*_*ddy 6 java regex string lookaround regex-lookarounds

我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块.我需要将它们分成两部分(一个整数部分和一个字符串).

我尝试过使用String.split("\\D", 1),但它正在吞噬第一个角色.我检查了所有的String API,但没有找到合适的方法.

做这件事有什么方法吗?

pol*_*nts 14

使用外观: str.split("(?<=\\d)(?=\\D)")

String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"
Run Code Online (Sandbox Code Playgroud)

\d是数字的字符类; \D是它的否定.所以这个零匹配断言匹配前一个字符是数字的位置,(?<=\d)后面的字符是非数字(?=\D).

参考

相关问题


使用有限拆分的替代解决方案

以下也有效:

    String[] parts = "123XYZ".split("(?=\\D)", 2);
    System.out.println(parts[0] + "-" + parts[1]);
Run Code Online (Sandbox Code Playgroud)

这在我们看到非数字之前就分裂了.这更接近你的原始解决方案,除了因为它实际上不匹配非数字字符,它不会"吃掉它".同时,它采用limit2,这真的是你想要的这里.

API链接

  • String.split(String regex, int limit)
    • 如果限制n大于零,则模式将在大多数n - 1时间应用,数组的长度不会大于n,并且数组的最后一个条目将包含除最后一个匹配分隔符之外的所有输入.