java - Java 中替换字符串时遇到问题

标签 java regex split

如果我有这个字符串:

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

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

String[] array = ...

因此数组包含以下输出:

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

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

最佳答案

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

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_ )。
  • (?=\\W)正向前瞻断言匹配项后面必须跟有非单词字符(单词字符以外的任何字符)。所以这个(?<=\\w)(?=\\W)正则表达式仅匹配边界而不匹配字符。

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

DEMO

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

输出:

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

关于java - Java 中替换字符串时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28793807/

相关文章:

java - 我如何处理 Undertow 中的 HTTP 方法?

java 正则表达式 url 解析

c++ - 使用 regex.h 时内存泄漏?

iphone - 将文件路径拆分为 iPhone SDK 中的组件

java - 如何拆分字符串并查看它是否是字符串中的最后一个条目?

javax.xml.bind.JAXBException Hibernate Java 10

java - 准备好的语句不从 oracle XE 数据库返回任何结果

java - 了解监听器通知程序上的同步

regex - Perl中的多行模式搜索和替换

python - 从某个字符开始按空格分割Python字符串