我想在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 :(得分: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
具有按正则表达式分割的方法,从而导致单行解决方案。