java - 小程序输出不正确。为什么这个 String 变量没有做我想要的?
问题描述
这个程序应该接受一个字符串,检查每个字母是否是元音并将元音改为下划线。例如,如果我输入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);
解决方案
在您的代码中,问题出在您的嵌套“for-loop”中。我用引号这么说是因为它实际上从不循环。第一次迭代立即中断循环,因为您的j=0
字母等于或不等于。在任何一种情况下,您都执行 a并附加字符。这意味着您的循环可以简化为检查字母是否为 an并将其替换为或保留它的简单循环。a
(letter == vowels[0])
break;
if-else
a
_
要解决此问题,您需要使用不同的方法。您可以创建一个元音字符串,例如“aeiouAEIOU”,并使用indexOf来测试所选字符是否为元音。
public static String omitVowels(String input) {
StringBuilder out = new StringBuilder(input.length());
String vowels = "aeiouAEIOU";
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (vowels.indexOf(c) >= 0) // is vowel if index not negative
out.append('_');
else
out.append(c);
}
return out.toString();
}
indexOf(char)
如果提供的字符不是字符串的一部分,将返回-1
,否则将返回特定索引。我们可以使用这个属性来测试字符是否是元音。
例子
omitVowels("hello world")
->"h_ll_ w_rld"
omitVowels("aeiou")
->"_____"
omitVowels("TESTing")
->"T_ST_ng"
推荐阅读
- terminal - 单独更改每个终端窗口的背景颜色
- gdb - 带有 Eclipse Oxygen 3a 的远程 gdb
- php - 在 PHP 中转义一个充满“和”的字符串
- php - 如果存在则更新行或插入
- angular - 尝试使用带有自定义 tslint 规则的 typescript 库,但在 ng lint 时出现“无法在模块外使用 import 语句”错误
- java - 基于值数组的绘画
- javascript - Java 特殊字符验证
- php - 我如何在 laravel 中修复此错误“1005 无法创建表`englishcollage`.`role_user`(错误号:150“外键约束格式不正确”
- angular - 谁/如何/何时使用 SSR 在 Angular 中创建 app.browser.module.ts 文件?
- python - 尝试使用 Python 列出 IBM Cloud Object Storage 中的对象时出现“指定的存储桶不存在”