Java中匹配含可变整数的字符串并完成指定格式替换的方法
解决方案:使用正则表达式匹配可变数字
要处理这种带有可变整数的标记替换,Java的String.replaceAll()方法结合正则表达式是最适合的方案,它能精准匹配并提取数字部分,再完成替换。
处理带尖括号的<FS:数字>标记
针对你提到的<FS:20>这类带尖括号的标记,可以用下面的代码:
String str = "I <FS:20>am in trouble.</FS>"; // 先替换</FS>为\fs0(你已经完成这一步) str = str.replace("</FS>", "\\fs0"); // 替换<FS:数字>为\fs数字 str = str.replaceAll("<FS:(\\d+)>", "\\\\fs$1"); System.out.println(str); // 输出结果:I \fs20am in trouble.\fs0
处理不带尖括号的FS:数字标记
如果还有像你输入示例里的FS:20(不带尖括号)的情况,可以调整正则表达式,让它同时匹配带/不带尖括号的场景:
String str = "I FS:20 am in trouble."; // 匹配带尖括号或不带的FS:数字格式 str = str.replaceAll("<?(FS:(\\d+))>?", "\\\\fs$2"); System.out.println(str); // 输出结果:I \fs20 am in trouble.
代码细节解释
- 正则表达式
<FS:(\\d+)>:<FS:匹配标记的固定前缀部分(\\d+)是一个捕获组,用来提取一个或多个连续数字(\d表示单个数字,+表示匹配至少一个)>匹配标记的后缀尖括号
- 替换字符串
\\\\fs$1:- Java里反斜杠需要双重转义,所以
\\\\最终会输出一个实际的\,因此\\\\fs会变成\fs $1表示引用第一个捕获组提取到的数字,也就是我们要保留的可变整数部分
- Java里反斜杠需要双重转义,所以
- 适配带/不带尖括号的正则
<?(FS:(\\d+))>?:<?和>?表示尖括号是可选匹配的$2引用第二个捕获组的数字(因为第一个捕获组包含了FS:数字整体)
这样不管数字是多少,都能自动提取并替换成你想要的格式啦。
内容的提问来源于stack exchange,提问作者Dimitar
相关产品推荐
相关产品推荐

