使用正则表达式在java上拆分数字字符串

时间:2012-03-16 03:33:57

标签: java regex

我想在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”]

3 个答案:

答案 0 :(得分:5)

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

反斜杠太多,请尝试[\\d]{1,4}(您只需要将它们转义一次,因此d前面的反斜杠变为\\。您编写的模式实际上是{{1 (一个字面反斜杠或一个文字d,一到四次)。

当Java决定将正则表达式添加到标准库时,他们应该还添加了一个正则表达式文字语法,而不是通过Strings(使用不可读的额外转义和没有编译时语法检查)。

答案 1 :(得分: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”]

答案 2 :(得分:1)

您不能在一个方法调用中执行此操作,因为您无法为拆分指定捕获组,这将需要分解为四个char块。

它不是“优雅”,但你必须先插入一个字符才能拆分,然后拆分:

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

这是输出:

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

请注意,您不需要使用Pattern等,因为String具有按正则表达式分割的方法,从而导致单行解决方案。