Java中如何去除标点前的空格

4
我有一个字符串。
"This is a big sentence .  !  ?  !  but I have to remove the space ."   

在这个句子中,我想去掉所有出现在标点符号之前的空格,变成这样:
"This is a big sentence.!?!  but I have to remove the space."   

我试图使用"\p{Punct}",但无法替换字符串中的内容。


所以你想要删除字符和标点之间的所有空格? - Thomas
3个回答

10

你应该使用正向先行断言:

newStr = str.replaceAll("\\s+(?=\\p{Punct})", "")

ideone.com为您的特定字符串提供演示。

表达式的分解:

  • \s:空白字符……
  • (?=\\p{Punct}) ……其后是标点符号。

我会在 \s 后面添加一个 + 量词 :) - Thomas
太棒了,它起作用了... 请问您能否解释一下,这样我就可以做更多类似的了。 - Arjit
如果我想找到标点符号后面的空格,我应该使用(\p{Punct}=?)还是其他什么? - Arjit

1
尝试使用此正则表达式查找所有标点符号前面的空格:\s+(?=\p{Punct})(Java字符串:"\\s+(?=\\p{Punct})"

0

你可以使用一个组并在替换字符串中引用它:

String text = "This is a big sentence . ! ? ! but I have to remove the space .";
String replaced = text.replaceAll("\\s+(\\p{Punct})", "$1")

在这里,我们使用(\\p{Punct})将标点符号捕获到一组中,并用该组(命名为$1)替换所有匹配的字符串。
无论如何,我的答案只是出于好奇:我认为@aioobe的答案更好 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接