在逗号,句点和其他标点符号后插入空格

时间:2014-06-24 22:54:31

标签: java regex string

在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("[,.!?;:]", " ");

所以我正在寻找等待你帮助的解决方案。 谢谢!!

3 个答案:

答案 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

Working Demo

答案 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.