Java字符串替换问题:将连续数字子串替换为单个指定字符
需求与问题
需要将字符串中的所有连续数字序列替换为单个*字符:
- 单个数字场景:输入
ramesh_gone_to_avbp_9_vc.pdf,需输出ramesh_gone_to_avbp_*_vc.pdf(当前实现此场景正常) - 多位数场景:输入
ramesh_gone_to_avbp_91_vc.pdf,期望输出ramesh_gone_to_avbp_*_vc.pdf,但当前实现会输出ramesh_gone_to_avbp_**_vc.pdf
已尝试的代码
String ss = "ramesh_gone_to_avbp_92_vc.pdf"; System.out.println(ss.replaceAll("(?<=[\d\.])-(?=[\d\.])", "*"));
解决方案
你当前使用的正则表达式匹配的是数字/点之间的连字符,完全没有处理数字本身,所以无法满足多位数替换为单个*的需求。
正确的做法是匹配一段连续的数字,然后替换为单个*,对应的代码如下:
String ss = "ramesh_gone_to_avbp_92_vc.pdf"; System.out.println(ss.replaceAll("\\d+", "*"));
正则说明
\d+:匹配一个或多个连续的阿拉伯数字(\d表示单个数字,+表示匹配1次及以上)- 每一段连续数字都会被替换成一个
*,不管这段数字有几位,都只会生成一个星号,完全符合需求。
内容的提问来源于stack exchange,提问作者Jharokha
相关产品推荐
相关产品推荐

