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

标签 java regex string

示例:

// 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();
}

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

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

有什么建议吗?

最佳答案

我建议使用

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

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

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

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

Java demo

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

关于java - 删除字符串末尾的所有标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308203/

相关文章:

java - 如何在eclipse中的所有java文件中添加一行

java - 在 Java 中使用 NuSMV 作为模型检查器

JavaScript 正则表达式 : remember a match without getting `undefined` results

regex - 使用 sed 更改文件扩展名

Python 提取某些字符串后的数字

java - 在没有正则表达式的情况下在段的开头和结尾测试 'noise'

在 C 中使用 snprintf 将字符转换为字符串

java - 发送 newrelic 应用程序名称

java - ArrayList<String> 类型中的方法 add(String) 不适用于参数 (Object)

java - 如何使用 GeckoDriver Firefox 和 Selenium 下载文件?