Java中使用String.replaceAll处理符号及\p{P}匹配标点原理咨询
问题1:\p{P}标点匹配原理解析
\p{P}是Java正则表达式支持的Unicode属性类,其中P是Unicode字符分类中「标点(Punctuation)」的缩写,会匹配所有Unicode标准中被归类为标点的字符,共包含7个子类:
\p{Pc}:连接类标点,如下划线\p{Pd}:短横线/破折号类标点\p{Ps}:左包裹类标点,如左括号、左方括号、左大括号\p{Pe}:右包裹类标点,如右括号、右方括号、右大括号\p{Pi}:前置引号类标点,如左双引号、左单引号\p{Pf}:后置引号类标点,如右双引号、右单引号\p{Po}:其他标点,如逗号、句号、感叹号、冒号等
注意在Java字符串中写正则时,反斜杠需要额外转义,所以实际使用时要写成\\p{P}。这个规则会匹配所有标点,如果你需要保留部分标点(比如第二个需求里的逗号),就不能直接用这个做全局替换。
问题2:指定字符串转换的replaceAll实现方案
你的需求可以通过两次链式调用replaceAll实现,逻辑清晰且易维护:
- 第一次替换匹配所有方括号、双引号,直接移除
- 第二次替换把逗号替换为「逗号+空格」的格式
完整代码示例:
String category = "[\"restaurant\",\"bar\",\"burger joint\"]"; String updatedCategory = category // 移除所有方括号、双引号 .replaceAll("[\\[\\]\"]", "") // 给逗号后加空格 .replaceAll(",", ", ");
执行后updatedCategory的值正好是目标结果restaurant, bar, burger joint。
内容的提问来源于stack exchange,提问作者Brian McCanaugh
相关产品推荐
相关产品推荐

