这个程序应该取一个字符串,检查每个字母是否是元音,并将元音改成下划线。例如,如果我进入 some
它应该输出 s_m_
. 这是一个简单的编程练习,我觉得我应该能够做到。然而,我真的被难住了,我不知道我做错了什么。
我已经声明了一个数组来保存元音 newStr
变量,它将包含更新的字符串,我在字符串中循环,使用 charAt()
检查它是否在房间里 vowels
数组。如果是,我补充说 _
更新后的字符串,如果不是,我保留原来的字母。最终输出错误,我做错了什么?
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
String newStr = "";
for (int x = 0; x < str.length(); x++) {
char letter = str.charAt(x);
for (int j = 0; j < vowels.length; j++) {
if (letter == vowels[j]) {
newStr = newStr + '_';
break;
} else {
newStr = newStr + letter;
break;
}
}
}
out.println(newStr);
3条答案
按热度按时间chy5wohz1#
在代码中,问题在嵌套的“for循环”中。我引用这句话是因为它实际上从不循环。第一次迭代
j=0
立即中断循环,因为您的字母等于a
与(letter == vowels[0])
不管怎样。不管是哪种情况,你都会break;
并附加字符。这意味着您的循环可以简化为一个简单的if-else
检查这封信是不是真的a
并将其替换为_
或者留着。要解决这个问题,您需要使用不同的方法。您可以创建一个元音字符串,例如“aeiouaeiou”,并使用indexof测试所选字符是否为元音。
ruoxqz4g2#
这很简单。只需迭代给定字符串的每个字符并替换为
_
如果是元音。使用stringbuilder
注意使用
String
. 这在java中是不可变的,因此要构建最终的字符串,应该使用StringBuilder
.使用正则表达式
或者,可以将正则表达式与
replaceAll()
方法String
班级。这也是正确的,因为在背景中,
replaceAll()
使用StringBUilder
.w8rqjzmb3#