如何使用Java交换字符串的第一个元音与最后一个元音
问题原因
你的现有代码存在两个核心逻辑错误:
- 循环第一行直接将原字符串的当前字符追加到
newWord中,之后碰到元音位置又额外追加替换后的字符,导致原元音字符没有被移除,反而新增了冗余字符 - 处理最后一个元音索引时,直接给
newWord赋值为单个字符的子串,清空了之前所有拼接结果,完全丢失了前半段字符串内容
修正方案
有两种简单的实现方式,都可以直接复用你已经定义好的fVowel、lVowel、firstVowel、lastVowel变量:
方案1:转字符数组直接交换(推荐,性能更高逻辑更简单)
Java中String是不可变类型,转成字符数组后可以直接修改指定索引位置的字符,不需要循环拼接:
// 你之前的变量定义逻辑不变,此处直接写交换逻辑 char[] charArray = s.toCharArray(); charArray[fVowel] = lastVowel; charArray[lVowel] = firstVowel; String newWord = new String(charArray); System.out.println(newWord); return newWord;
方案2:循环拼接修正版
如果你要保留循环拼接的写法,调整判断逻辑,碰到元音位置直接加替换后的字符,非元音位置再加原字符即可:
// 推荐用StringBuilder避免频繁字符串拼接产生的冗余对象 StringBuilder newWord = new StringBuilder(); for(int i = 0; i < s.length(); i++) { if(i == fVowel) { newWord.append(lastVowel); } else if(i == lVowel) { newWord.append(firstVowel); } else { newWord.append(s.charAt(i)); } } System.out.println(newWord.toString()); return newWord.toString();
两种方案都可以匹配你给出的测试用例,输出符合预期的结果。
内容的提问来源于stack exchange,提问作者Adan Vivero
相关产品推荐
相关产品推荐

