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

Java按索引删除字符串字符:现有方法调用结果异常求解

按索引删除字符串字符的正确解法

哦,这个问题我之前也踩过坑!你的代码逻辑有个关键问题:replaceFirst根本不是用来按索引删除字符的——它是根据字符内容去替换第一个匹配项,而不是针对你指定的索引位置。

比如如果你的字符串是"01.05",你想删除索引3的'0',但replaceFirst("0", "")会删掉开头的第一个'0',完全不符合预期。至于你得到"1"的结果,大概率是因为索引计算错误导致你选中了特殊字符(比如.),而.在正则表达式里是通配符,会匹配任意字符,替换后就把开头的字符删掉了,才出现了意外结果。

下面给你两种靠谱的解决方案:

方案一:使用substring拼接(最直接)

利用字符串的substring方法,把原字符串分成索引前后两部分再拼接,就相当于删掉了指定索引的字符:

private String removeByIndex(String str, int index) {
    // 先做边界检查,避免索引越界异常
    if (index < 0 || index >= str.length()) {
        return str; // 也可以根据需求抛出IllegalArgumentException
    }
    // 拼接索引前的子串和索引后的子串
    return str.substring(0, index) + str.substring(index + 1);
}

方案二:使用StringBuilder(高效适合频繁操作)

如果需要频繁做字符串修改,StringBuilder的性能更好,而且它有专门的删除指定索引字符的方法:

private String removeByIndex(String str, int index) {
    if (index < 0 || index >= str.length()) {
        return str;
    }
    StringBuilder sb = new StringBuilder(str);
    sb.deleteCharAt(index); // 直接删除指定索引的字符
    return sb.toString();
}

用你的测试案例验证:调用removeByIndex("1.05", 2)(因为"1.05"的索引2是'0'),两种方案都会返回你想要的"1.5"。

一定要记得加边界检查哦,不然当传入的索引超出字符串范围时,会抛出StringIndexOutOfBoundsException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:34