2012-03-16 59 views
0

我想在Java上使用正则表达式来分割数字字符串。 我使用在线正则表达式测试正则表达式是正确的。 但在Java中是错误的。使用正则表达式在java上分割数字字符串

Pattern pattern = Pattern.compile("[\\\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// I expect 2 results ["1234","56"] 
// Actual results is ["123456"] 

任何遗漏?


我知道这个问题很无聊。但我想解决这个问题。 回答

Pattern pattern = Pattern.compile("[\\d]{1,4}"); 
String[] results = pattern.split("123456"); 
// Results length is 0 
System.out.println(results.length); 

不工作。我已经尝试过了。结果将不会返回任何结果。 请在回答之前尝试。

真诚感谢帮助过我的人。


解决方案:

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

输出2次的结果[ “1234”, “56”]

+0

您正在获取一个空数组,因为split会返回分隔符之间的部分*以便分割,并自行丢弃分隔符。也许这有助于:http://stackoverflow.com/questions/2206378/how-to-split-a-string-but-also-keep-the-delimiters http://stackoverflow.com/questions/275768/is-there -a-way-split-strings-with-string-split-and-include-the-delimiters – Thilo 2012-03-16 08:12:43

+0

好吧,我现在明白了,谢谢你的帮助。 – 2012-03-16 09:03:15

回答

5
Pattern pattern = Pattern.compile("[\\\\d]{1,4}") 

太多的反斜杠,尝试[\\d]{1,4}(你只有一次逃脱他们,所以d前面的反斜杠变成了\\,你写的模式实际上是[\\d]{1,4}(文字反斜杠或文字d,一至四次)

当Java决定向标准库添加正则表达式时,它们应该也添加了一个正则表达式字面语法,而不是在Strings上使用shoe-horning(带有不可读的额外转义和无编译时语法检查)。

+0

根本不需要[]。 – 2012-03-16 03:36:07

+0

Pattern pattern = Pattern.compile(“\\ d {1,4}”); String [] results = pattern.split(“123456”);结果长度为零。 – 2012-03-16 03:39:13

+0

呵呵,[\\ d] {1,4}不工作,请尝试。谢谢。 – 2012-03-16 03:51:41

1

解决方案:

Pattern pattern = Pattern.compile("([\\d]{1,4})"); 
Matcher matcher = pattern.matcher("123456"); 
List<String> results = new ArrayList<String>(); 
while (matcher.find()) { 
    results.add(matcher.group(1)); 
} 

输出2次的结果[ “1234”, “56”]

1

你不能做到这一点的一个方法调用,因为你不能指定捕获组拆分,这将需要分解成四个字符块。

这不是“优雅”,但你必须先插入字符分割上,然后分裂:

String[] results = "123456".replaceAll("....", "$0,").split(","); 

下面是输出:

System.out.println(Arrays.toString(results)); // prints [1234, 56] 

请注意,您不需要使用Pattern等,因为String有一个拆分正则表达式的方法,导致一个单线解决方案。

相关问题