在Java中,在一些标点符号之后修复丢失的空格的最佳方法是:
, . ; : ? !
例如:
String example = "This is!just an:example,of a string,that needs?to be fixed.by inserting:a whitespace;after punctuation marks.";
输出应为:
"This is! just an: example, of a string, that needs? to be fixed. by inserting: a whitespace; after punctuation marks."
很明显,这不起作用:
example = example.replaceAll("[,.!?;:]", " ");
所以我正在寻找等待你帮助的解决方案。 谢谢!!
答案 0 :(得分:6)
您可以使用Positive Lookbehind and Negative Lookahead。
的组合example = example.replaceAll("(?<=[,.!?;:])(?!$)", " ");
<强>解释强>:
Positive Lookbehind在任何选择标点符号后面的位置断言。 Negative Lookahead的使用表示,在此位置(字符串的末尾),以下内容无法匹配。
(?<= # look behind to see if there is:
[,.!?;:] # any character of: ',', '.', '!', '?', ';', ':'
) # end of look-behind
(?! # look ahead to see if there is not:
$ # before an optional \n, and the end of the string
) # end of look-behind
答案 1 :(得分:4)
您必须在替换表达式中添加$0
,您可以使用:
example = example.replaceAll("[,.!?;:]", "$0 ");
它将使用该内容和空格替换匹配的正则表达式。
顺便说一句,如果你想确保你没有多个空格,你可以这样做:
example = example.replaceAll("[,.!?;:]", "$0 ").replaceAll("\\s+", " ");
将转换:
这只是一个字符串的例子,需要修复 插入:空格;标点符号后;;
要:
这是!只是一个:一个字符串的例子,需要什么?等待修复。通过 插入:空格;标点符号后。
答案 2 :(得分:1)
您可以使用此前提断言断言以防止为空白空间添加额外空间,并匹配所有非字符并在其后添加空格。:
<强>溶液强>
String example = "This is!just an:example,of a string,that needs?to be fixed.by inserting:a whitespace;after punctuation marks.";
example = example.replaceAll("(?!\\s)\\W", "$0 ");
System.out.println(example);
<强>结果:强>
This is! just an: example, of a string, that needs? to be fixed. by inserting: a whitespace; after punctuation marks.