删除字符串末尾的所有标点符号

2022-09-04 22:32:07

示例

// A B C.       -> A B C
// !A B C!      -> !A B C
// A? B?? C???  -> A? B?? C

以下是我到目前为止所拥有的:

while (endsWithRegex(word, "\\p{P}")) {
    word = word.substring(0, word.length() - 1);
}

public static boolean endsWithRegex(String word, String regex) {
    return word != null && !word.isEmpty() && 
        word.substring(word.length() - 1).replaceAll(regex, "").isEmpty();
}

这个当前的解决方案是有效的,但是由于它已经在 中调用,我们应该能够执行如下操作:String.replaceAllendsWithRegex

word = word.replaceAll(/* regex */, "");

有什么建议吗?


答案 1

我建议使用

\s*\p{Punct}+\s*$

它将匹配字符串末尾的可选空格和标点符号。

如果您不关心空格,只需使用.\p{Punct}+$

不要忘记,在 Java 字符串中,反斜杠应该加倍以表示文字反斜杠(必须用作正则表达式转义符号)。

Java 演示

String word = "!Words word! ";
word = word.replaceAll("\\s*\\p{Punct}+\\s*$", "");
System.out.println(word); // => !Words word

答案 2

您可以使用:

str = str.replaceFirst("\\p{P}+$", "");

要同时包含空格::

str = str.replaceFirst("[\\p{Space}\\p{P}]+$", "")