Java如何替换字符串数组中每个单词的首字母为A、尾字母为Z
代码错误点说明
你的代码存在3个核心问题,直接导致运行结果不符合预期:
- 未按需求拆分单词:你的测试数组仅包含1个元素,是一整段由6个单词组成的完整字符串,现有逻辑完全没有拆分单个单词,只会处理整段字符串的首尾,根本无法实现「每个单词单独替换首尾字母」的需求。
- 索引用错对象:你调用
StringBuilder.replace时传入的索引是数组长度replaceFirstLetter.length,不是当前处理字符串的长度。测试场景下数组长度为1,第一次replace(0, 1, "A")确实把整段字符串的首字母J替换成了A,但第二次replace(replaceFirstLetter.length-1, replaceFirstLetter.length, "Z")等价于replace(0,1,"Z"),又把刚替换好的首字母A改成了Z,全程没有碰过字符串的尾字符。 - StringBuilder作用域错误:你把StringBuilder定义在循环外,一旦数组包含多个元素,会不停拼接之前处理过的内容,生成重复的脏数据。
修正方向
- 遍历数组中每个字符串元素时,先按空格拆分出所有独立单词
- 逐个处理单词:保留单词中间的字符,单独把首字符替换为A、尾字符替换为Z,注意处理单字符单词、空串等边界情况
- 处理完的单词重新用空格拼接为完整字符串,存入结果数组对应位置
- StringBuilder要定义在处理单个字符串/单词的作用域内,避免残留历史数据
修正后可运行代码
public static String[] replaceFirstLetterWithZ(String[] replaceFirstLetter) { String[] tempTable = new String[replaceFirstLetter.length]; for (int i = 0; i < replaceFirstLetter.length; i++) { // 拆分当前字符串的所有单词 String[] words = replaceFirstLetter[i].split(" "); StringBuilder stringBuilder = new StringBuilder(); for (int j = 0; j < words.length; j++) { String word = words[j]; if (word.isEmpty()) { stringBuilder.append(word); } else if (word.length() == 1) { // 单字符单词首尾重合,这里统一替换为A,可根据需求调整 stringBuilder.append("A"); } else { // 拼接首字母A + 单词中间部分 + 尾字母Z stringBuilder.append("A") .append(word, 1, word.length() - 1) .append("Z"); } // 单词间补空格,最后一个单词后不补 if (j != words.length - 1) { stringBuilder.append(" "); } } tempTable[i] = stringBuilder.toString(); } return tempTable; }
传入你的测试数组运行后,输出结果为:
[AavZ AoplZ ArangZ AeZ AoZ AaZ]
完全符合每个单词首字母换A、尾字母换Z的需求。
内容的提问来源于stack exchange,提问作者user18802229
相关产品推荐
相关产品推荐

