You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符串去标点问题:单引号无法被\\p{Punct}匹配

解决方案:移除字符串中的标点(含单引号)

首先,你踩了Java字符串的经典坑——String是不可变对象:replaceAll()方法不会修改原line变量,而是返回一个全新的字符串对象。你必须把这个返回值赋值给变量,才能看到修改后的结果。

其次关于\p{Punct}的疑问:Java正则里的\p{Punct}确实包含ASCII单引号(',U+0027),你的例子里的单引号本应该被匹配到。但如果后续遇到特殊单引号(比如排版用的智能引号’),可以用更宽泛的\p{P}来匹配所有Unicode标点符号类,确保覆盖所有情况。

正确代码示例

String line = "there's, isn't";
String result = line.replaceAll("\\p{Punct}", "");
System.out.println(result); // 输出:theres isnt

如果想要更直观地确保单引号被覆盖,也可以显式把单引号加入正则(其实没必要,但适合理解):

String result = line.replaceAll("[\\p{Punct}']", "");

关键知识点提醒

  • Java中所有String操作方法(比如replace、substring等)都不会修改原字符串,必须接收返回值才能获取修改后的结果。
  • \p{Punct}在Java正则中的定义是:所有ASCII标点符号,包括! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ { | } ~`这些字符。
  • 如果需要处理非ASCII标点(比如中文标点、智能引号),用\p{P}可以匹配所有Unicode标点符号类。

内容的提问来源于stack exchange,提问作者Sohbet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:50