从字符串中删除单词中的标点符号和空格的正确方法

时间:2017-10-21 17:58:18

标签: java regex string parsing

我有一个字符串,例如:"h e l l o, world! ! am gl@d to see you!". 我希望得到这样的结果(删除标点符号,其他符号和空格):"hello, world! am gld to see you!" 我可以用什么方式实现这个?

我尝试使用此代码将字符串拆分为单词,但它不会在正确的位置处理单词和标点符号中的空格。

String[] words = text.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

1 个答案:

答案 0 :(得分:1)

以下是进行更改的代码示例。

String s = "h e l l o, world! ! am gl@d to see    you!";
System.out.println(s);
s = s.replaceAll("(?<=\\b\\p{L})\\s+(?=\\p{L}\\b)", ""); // remove spaces separating single letters
System.out.println(s);
s = s.replaceAll("\\s+(?=\\P{L})", ""); // remove spaces before non-letters
System.out.println(s);
s = s.replaceAll("(\\P{L})\\1+", "$1"); // remove repeated non-letters
System.out.println(s);
s = s.replaceAll("@", "a"); // replace '@' with 'a'
System.out.println(s);

输出

h e l l o, world! ! am gl@d to see    you!
hello, world! ! am gl@d to see    you!
hello, world!! am gl@d to see you!
hello, world! am gl@d to see you!
hello, world! am glad to see you!