Java如何通过单条regex语句移除指定字符后再删除字符串末尾字符
问题原因
你之前的写法不生效是因为正则匹配是直接作用于原始输入字符串,无法先完成指定字符删除的中间操作后再匹配末尾字符。你写的[<>,t,d,//].$只会匹配原始字符串末尾相邻的「1个指定字符+1个任意字符」,自然没法实现预期效果。另外你原来的正则字符集存在冗余:字符集内不需要用逗号分隔字符,斜杠也不需要重复写两次,简化后为[<>td/]即可。
正确实现
要求单条语句的话,直接链式调用两次replaceAll即可,第二次替换作用于第一次删除指定字符后的结果,完全符合需求,易读性也更高:
String codCIM = element.toString().replaceAll("[<>td/]", "").replaceAll(".$", "");
如果希望只用一次正则操作实现,也可以写为:
String codCIM = element.toString().replaceAll("[<>td/]|(?:[^<>td/])$", "");
效果验证
针对你的示例输入"dtt>W43451005/dttt>",两种写法最终输出均为预期的"W4345100"。
内容的提问来源于stack exchange,提问作者Bogdan
相关产品推荐
相关产品推荐

