无法替换 Java 中的字符串
Trouble replacing strings in Java
如果我有这个字符串:
String line = "This, is Stack; Overflow.";
并希望将其拆分为以下字符串数组:
String[] array = ...
因此数组包含此输出:
["This",",","is","Stack",";","Overflow","."]
我应该在 split() 方法中放入什么正则表达式?
只需根据 space 或单词字符与非单词字符之间存在的边界拆分您的输入,反之亦然。
String s = "This, is Stack; Overflow.";
String parts[] = s.split("\s|(?<=\w)(?=\W)");
System.out.println(Arrays.toString(parts));
\s
匹配任何类型的白色space 字符,\w
匹配单词字符,\W
匹配非单词字符。
\s
匹配 space 个字符。
(?<=\w)
正向后视断言匹配之前必须有一个单词字符 (a-z
, A-Z
, 0-9
, _
)。
(?=\W)
断言匹配后必须跟一个非单词字符(单词字符以外的任何字符).所以这个 (?<=\w)(?=\W)
正则表达式只匹配边界而不匹配字符。
因此根据匹配 spaces 和边界拆分输入将为您提供所需的输出。
或
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, .]
你可以用这个模式来做:
\s+|(?<=\S)(?=[^\w\s])|(?<=[^\w\s])\b
它修剪空格并处理连续的特殊字符,示例:
和;This, is Stack; ;; Overflow.
你获得:[";", "This", ",", "is", "Stack", ";", ";", ";", "Overflow", "."]
但显然,更有效的方法是不使用 split 方法,而是使用这种模式的 find 方法:
\w+|[^\w\s]
如果我有这个字符串:
String line = "This, is Stack; Overflow.";
并希望将其拆分为以下字符串数组:
String[] array = ...
因此数组包含此输出:
["This",",","is","Stack",";","Overflow","."]
我应该在 split() 方法中放入什么正则表达式?
只需根据 space 或单词字符与非单词字符之间存在的边界拆分您的输入,反之亦然。
String s = "This, is Stack; Overflow.";
String parts[] = s.split("\s|(?<=\w)(?=\W)");
System.out.println(Arrays.toString(parts));
\s
匹配任何类型的白色space 字符,\w
匹配单词字符,\W
匹配非单词字符。
\s
匹配 space 个字符。(?<=\w)
正向后视断言匹配之前必须有一个单词字符 (a-z
,A-Z
,0-9
,_
)。(?=\W)
断言匹配后必须跟一个非单词字符(单词字符以外的任何字符).所以这个(?<=\w)(?=\W)
正则表达式只匹配边界而不匹配字符。因此根据匹配 spaces 和边界拆分输入将为您提供所需的输出。
或
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, .]
你可以用这个模式来做:
\s+|(?<=\S)(?=[^\w\s])|(?<=[^\w\s])\b
它修剪空格并处理连续的特殊字符,示例:
和;This, is Stack; ;; Overflow.
你获得:[";", "This", ",", "is", "Stack", ";", ";", ";", "Overflow", "."]
但显然,更有效的方法是不使用 split 方法,而是使用这种模式的 find 方法:
\w+|[^\w\s]