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

Java如何在指定位置将一串点字符替换为其他字符?

实现指定位置替换的点字符串打印方法

你用StringBuilder来实现这个需求的思路非常靠谱,完全不需要用到数组,不过原代码里有几个细节需要调整,让它更严谨、符合需求:

原代码的问题

  1. 方法返回值设为int但返回length + position没有实际意义,这个方法的核心是打印操作,改成void更合理
  2. 缺少参数合法性检查,如果传入的position不在有效索引范围内(小于0或大于等于length),会直接抛出索引越界异常
  3. 没考虑到实际使用中可能的计数习惯——比如示例里的#在第5个位置,对应的是索引4,如果用户传入的position是从1开始计数的,需要做转换

优化后的代码

static void printSingleDot(int length, int position) {
    // 先校验参数是否合法
    if (length <= 0) {
        System.out.println("字符串长度必须大于0");
        return;
    }
    if (position < 0 || position >= length) {
        System.out.println("替换位置超出有效范围,请输入0到" + (length - 1) + "之间的数值");
        return;
    }

    // 生成全点字符串,再用StringBuilder替换指定位置
    String fullDots = ".".repeat(length);
    StringBuilder result = new StringBuilder(fullDots);
    result.setCharAt(position, '#');
    System.out.println(result);
}

适配1开始的计数场景

如果你的练习要求position参数是从1开始计数的(比如输入5表示第5个字符),只需要修改两处:

  • 调整校验逻辑:
if (position < 1 || position > length) {
    System.out.println("替换位置超出有效范围,请输入1到" + length + "之间的数值");
    return;
}
  • 替换时转换索引:
result.setCharAt(position - 1, '#');

这样调整后,代码既满足需求,又能避免异常,完全符合你不用数组的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39