无法在Java中替换字符串

时间:2015-03-01 12:58:41

标签: java regex split

如果我有这个字符串:

String line = "This, is Stack; Overflow.";

并希望将其拆分为以下字符串数组:

String[] array = ...

所以数组包含这个输出:

["This",",","is","Stack",";","Overflow","."]

我应该在split()方法中加入什么正则表达式?

2 个答案:

答案 0 :(得分:1)

根据单词字符和非单词字符之间存在的空格或边界来分割输入,反之亦然。

String s = "This, is Stack; Overflow.";
String parts[] = s.split("\\s|(?<=\\w)(?=\\W)");
System.out.println(Arrays.toString(parts));

\s匹配任何类型的空白字符,\w匹配单词字符,\W匹配非单词字符。

  • \s匹配空格字符。
  • (?<=\\w)肯定的后卫断言必须在匹配前加上一个字符( a-zA-Z0-9,{{1} } 的)。
  • _肯定前瞻,断言匹配必须后跟一个非单词字符(字符以外的任何字符)。所以这个(?=\\W)正则表达式只匹配边界而不匹配字符。

  • 因此,根据匹配空格和边界分割输入将为您提供所需的输出。

DEMO

(?<=\\w)(?=\\W)

<强>输出:

String s = "This, is Stack; Overflow.";
String parts[] = s.split("\\s|(?<=\\w)(?=\\W)|(?<=[^\\w\\s])(?=\\w)");
System.out.println(Arrays.toString(parts));

答案 1 :(得分:0)

你可以用这种模式做到这一点:

\\s+|(?<=\\S)(?=[^\\w\\s])|(?<=[^\\w\\s])\\b

它修剪空格并处理连续的特殊字符,例如:

使用;This, is Stack; ;; Overflow.

您获得:[";", "This", ",", "is", "Stack", ";", ";", ";", "Overflow", "."]

但显然,更有效的方法是不使用split方法,而是使用此模式的find方法:

\\w+|[^\\w\\s]