从Java中的字符串中删除标点符号

在文本处理过程中,无论您是在搜索某些单词并制定模式匹配规则、计算元素的频率等等——标点符号都会影响您的计划。

通常,您需要删除停用词、标点符号、数字或其他 一些 角色类别,取决于您的最终目标。

在这个简短的教程中,我们将了解如何在 Java 中从字符串中删除标点符号。

使用 RegEx(正则表达式)从字符串中删除标点符号

正则表达式在这里非常适合,因为它们很可能成为其他处理部分的一部分,并且因为它们是高效的模式匹配器! 在Java中,匹配标点的正则表达式是 p{Punct} 或速记 p{P}.

您必须转义字符串中的第一个反斜杠,因此删除所有标点符号相当于匹配它们并替换为空字符:

String.replaceAll("p{P}", "")

让我们把它应用到一个简单的句子中:

String text = "Hi! This is, in effect, a synthetic sentence. It's meant to have several punctuation characters!";
String clean = text.replaceAll("p{P}", "");
System.out.println(clean);

结果是:

Hi This is in effect a synthetic sentence Its meant to have several punctuation characters

让我们看看这里有哪些字符被视为标点符号:

String text = "!#$%&'()*+,-./:;[email protected][]^_`{|}~";
String clean = text.replaceAll("p{P}", "");
System.out.println(clean);

有了这些特殊字符——去掉标点符号后剩下哪些?

$+^`|~

从没有 RegEx 的字符串中删除标点符号

如果您不想使用正则表达式,则可以在遍历字符串的每个字符时进行手动检查。 记得使用一个 StringBuffer 代替 String 这样做的时候,因为字符串是不可变的,每次你想添加一个字符时都需要复制——所以你要创建 string.length 内存中的字符串数。

StringBuffer 是可变的,并且可以在过程结束时轻松转换为不可变字符串:

查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!

public static String removePunctuations(String s) {
    StringBuffer buffer = new StringBuffer();
    for (Character c : s.toCharArray()) {
        if(Character.isLetterOrDigit(c))
            buffer.append(c);
    }
    return buffer.toString();
}

让我们创建一个字符串并清理它:

String text = "Hello! nHere are some special characters: !#$%&'()*+,-./:;[email protected][]^_`{|}~ nWhere are they? :(n";
System.out.println(text);
String clean = removePunctuations(text);
System.out.println(clean);
Hello! 
Here are some special characters: !#$%&'()*+,-./:;[email protected][]^_`{|}~ 
Where are they? :(

HelloHerearesomespecialcharactersWherearethey

虽然此过程更具可定制性,但它仅检查字母和数字。 您也可以手动检查字符代码,并且只排除一些标点符号 - 并保留空格、换行符等。

结论

在这个简短的教程中,我们了解了如何在 Java 中使用正则表达式或手动检查从字符串中删除标点符号或某些特殊字符。 for 环。

时间戳记:

更多来自 堆栈滥用