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

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表示引用第一个捕获组提取到的数字,也就是我们要保留的可变整数部分
  • 适配带/不带尖括号的正则<?(FS:(\\d+))>?:
    • <?和>?表示尖括号是可选匹配的
    • $2引用第二个捕获组的数字(因为第一个捕获组包含了FS:数字整体)

这样不管数字是多少,都能自动提取并替换成你想要的格式啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:30