需要在java中将字符串拆分为两部分
我有一个字符串,其中包含一个连续的数字块,然后是一个连续的字符块。 我需要将它们分成两部分(一个整数部分和一个字符串)。
我尝试使用String.split("\\D", 1)
,但它吃掉了第一个字符。 我检查了所有的String API,但没有找到合适的方法。
做这件事有什么方法吗?
使用lookarounds: str.split("(?<=\\d)(?=\\D)")
String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)"); System.out.println(parts[0] + "-" + parts[1]); // prints "123-XYZ"
\d
是数字的字符类; \D
是它的否定。 所以这个零匹配断言匹配前一个字符是数字的位置(?<=\d)
,后面的字符是非数字(?=\D)
。
参考
- regular-expressions.info/Lookarounds和Character Class
相关问题
- Java分裂正在吃我的角色。
- 有没有办法用String.split()分割字符串并包含分隔符?
使用有限拆分的替代解决方案
以下也有效:
String[] parts = "123XYZ".split("(?=\\D)", 2); System.out.println(parts[0] + "-" + parts[1]);
这在我们看到非数字之前就分裂了。 这更接近你的原始解决方案,除了因为它实际上不匹配非数字字符,它不会“吃掉它”。 此外,它使用2
limit
,这真的是你想要的。
API链接
-
String.split(String regex, int limit)
- 如果限制
n
大于零,那么模式将最多应用n - 1
次,数组的长度将不大于n
,并且数组的最后一个条目将包含超出最后一个匹配分隔符的所有输入。
- 如果限制
总有一种老式的方式:
private String[] split(String in) { int indexOfFirstChar = 0; for (char c : in.toCharArray()) { if (Character.isDigit(c)) { indexOfFirstChar++; } else { break; } } return new String[]{in.substring(0,indexOfFirstChar), in.substring(indexOfFirstChar)}; }
(希望它也适用于仅限数字或仅限字符串的字符串 – 无法在此处测试 – 如果不是,请将其作为一般概念)