Java如何实现字符串元音字母加倍,现有代码报错该怎么解决?
报错原因分析
- Java中
String是不可变类,charAt(int index)方法仅支持读取指定索引位置的字符,不能作为左值被赋值,你编写的str.charAt(i+1) = str.charAt(i)语法本身不合法,这是触发unexpected type错误的直接原因。 - 即使你改用可变的
StringBuilder操作字符序列,直接修改原序列的索引也会导致遍历长度错乱,且当i走到字符串最后一位时,i+1会触发数组越界异常。
可行实现方式
方案1:遍历拼接实现(逻辑直观兼容性好)
不需要修改原字符串,直接遍历每个字符,判定为元音时往结果中追加两次当前字符,否则追加一次即可,使用StringBuilder做拼接比直接用+拼接字符串效率更高:
public static String doubleVowel(String str) { StringBuilder display = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char current = str.charAt(i); display.append(current); // 判断当前字符是否为小写元音 if (current == 'a' || current == 'e' || current == 'i' || current == 'o' || current == 'u') { display.append(current); } } return display.toString(); }
该实现完全符合要求:输入water输出waateer,输入phone输出phoonee。如果需要支持大写元音,只需要在判断条件中补充大写字母的判定即可。
方案2:正则替换实现(代码简洁)
通过正则表达式匹配所有元音字符,直接替换为两次相同字符即可:
public static String doubleVowel(String str) { // 小写元音匹配规则,如需兼容大写可修改为 "([aeiouAEIOU])" return str.replaceAll("([aeiou])", "$1$1"); }
内容的提问来源于stack exchange,提问作者prezido17
相关产品推荐
相关产品推荐

