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

Java中如何使用Regex正则表达式替换字符串指定位置的第n个字符

Java 正则替换指定索引位置字符解决方案

正则实现方案

你要的需求可以通过正则分组捕获实现,核心逻辑是:捕获目标位置之前的N-1个字符,匹配目标位置的单个字符,替换时仅保留捕获的前置内容,即可实现删除/替换目标位字符的效果。

匹配规则说明

  • 若你使用的是从1开始计数的索引(比如你举例的第3位对应字符d),替换第N位的正则格式为:^(.{N-1}).
  • 若你使用的是从0开始计数的索引,替换第K位的正则格式为:^(.{K}).

代码示例

以你提供的字符串为例,删除1索引下第3位的d,Java实现代码如下:

public class RegexReplaceDemo {
    public static void main(String[] args) {
        String originStr = "todayiwasnotagoodday";
        // 目标替换位:1开始计数的第3位
        int targetIndex = 3;
        // 动态生成正则
        String regex = String.format("^(.{%d}).", targetIndex - 1);
        // 替换为捕获组1的内容(即前N-1位),如果要替换为其他字符比如*,可写为 "$1*"
        String result = originStr.replaceAll(regex, "$1");
        System.out.println(result); // 输出:toayiwasnotagoodday
    }
}

注意事项

如果字符串可能出现长度小于目标索引的情况,可将正则修改为^(.{%d}).?,避免匹配失败原字符串完全不替换。

更优的非正则方案

如果没有强制要求必须使用正则实现,Java中直接操作字符序列的方案性能更高、可读性更强:

String originStr = "todayiwasnotagoodday";
int targetIndex = 3;
// 1开始计数转0开始计数调用deleteCharAt
String result = new StringBuilder(originStr).deleteCharAt(targetIndex - 1).toString();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 18:33:02