需要在java中将字符串分成两部分
Posted
技术标签:
【中文标题】需要在java中将字符串分成两部分【英文标题】:Need to split a string into two parts in java 【发布时间】:2011-03-01 01:13:18 【问题描述】:我有一个字符串,它包含一个连续的数字块,然后是一个连续的字符块。我需要将它们分成两部分(一个整数部分和一个字符串)。
我尝试使用String.split("\\D", 1)
,但它占用了第一个字符。
我检查了所有的 String API 并没有找到合适的方法。
有什么方法可以做这件事吗?
【问题讨论】:
【参考方案1】:使用环视: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 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]);
这会在我们看到非数字之前分裂。这更接近您的原始解决方案,除了因为它实际上不匹配非数字字符,它不会“吃掉它”。此外,它使用了2
中的limit
,这正是您想要的。
API 链接
String.split(String regex, int limit)
如果限制n
大于零,则模式将最多应用n - 1
次,数组的长度将不大于n
,并且数组的最后一个条目将包含最后一个以外的所有输入匹配的分隔符。
【讨论】:
【参考方案2】:总是有一种老式的方式:
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);
(希望它也适用于仅数字或仅字符的字符串 - 无法在此处测试 - 如果不是,则将其作为一般想法)
【讨论】:
以上是关于需要在java中将字符串分成两部分的主要内容,如果未能解决你的问题,请参考以下文章