我有一个字符串,它包含一个连续的数字 block ,然后是一个连续的字符 block 。我需要将它们分成两部分(一个整数部分和一个字符串)。
我尝试使用 String.split("\\D", 1)
,但它占用了第一个字符。
我检查了所有的 String API 并没有找到合适的方法。
有什么方法可以做到这一点吗?
最佳答案
使用环视:str.split("(?<=\\d)(?=\\D)")
String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"
\d
是数字的字符类; \D
是它的否定。所以这个零匹配断言匹配前面字符是数字的位置 (?<=\d)
, 后面的字符是非数字 (?=\D)
.
引用资料
相关问题
- Java split is eating my characters.
- Is there a way to split strings with String.split() and include the delimiters?
使用有限拆分的替代解决方案
以下也有效:
String[] parts = "123XYZ".split("(?=\\D)", 2);
System.out.println(parts[0] + "-" + parts[1]);
就在我们看到非数字之前 split 。这更接近您的原始解决方案,除了因为它实际上不匹配非数字字符,所以它不会“吃掉它”。此外,它使用 limit
的 2
,这正是您想要的。
API 链接
-
String.split(String regex, int limit)
- 如果极限
n
大于零,则最多应用该模式n - 1
次,数组的长度将不大于n
, 数组的最后一个条目将包含最后一个匹配的定界符之后的所有输入。
- 如果极限
关于java - 需要在java中将一个字符串分成两部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995606/