Java如何在指定位置将一串点字符替换为其他字符?
实现指定位置替换的点字符串打印方法
你用StringBuilder来实现这个需求的思路非常靠谱,完全不需要用到数组,不过原代码里有几个细节需要调整,让它更严谨、符合需求:
原代码的问题
- 方法返回值设为
int但返回length + position没有实际意义,这个方法的核心是打印操作,改成void更合理 - 缺少参数合法性检查,如果传入的
position不在有效索引范围内(小于0或大于等于length),会直接抛出索引越界异常 - 没考虑到实际使用中可能的计数习惯——比如示例里的
#在第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
相关产品推荐
相关产品推荐

