我正在为我的计算机科学课程做作业。任务是获取用户输入,删除所有元音,然后打印新语句。
我知道我可以用这段代码轻松完成:
string.replaceAll("[aeiou](?!\\b)", "")
但我的导师希望我使用嵌套的if和else if语句来实现结果。现在我正在使用这样的东西:
if(Character.isLetter('a')){
'do something'
}else if(Character.isLetter('e')){
'do something else'
但我不确定在if
和else if
语句中该怎么做。我应该删除这封信吗?或者有更好的方法吗?
看到这是我的作业,我不想要完整的答案只是提示。谢谢!
答案 0 :(得分:6)
我认为他可能想要的是你读取字符串,创建一个新的空字符串(称之为s
),循环输入并将所有不是元音的字符添加到{{1} }(这需要s
语句)。然后,您只需打印if
。
编辑:您可能需要考虑使用StringBuilder
,因为重复的字符串连接可能会影响性能,但这个想法是一样的。但说实话,我怀疑这会对这类事情产生明显的影响。
答案 1 :(得分:3)
Character.isLetter('a')
Character.isLetter(char)告诉您,您提供的价值是否是一封信,在这种情况下没有帮助(您已经知道" a"是一封信)。
您可能希望使用等于运算符==
来查看您的角色是否是" a",如:
char c = ...
if(c == 'a') {
...
} else if (c == 'e') {
...
}
您可以通过多种方式获取String中的所有字符:
答案 2 :(得分:2)
我认为你可以通过字符检查迭代,如果这是元音或不是,如下所示:
define a new string
for(each character in input string)
//("aeiou".indexOf(character) <0) id one way to check if character is consonant
if "aeiou" doesn't contain the character
append the character in the new string
答案 3 :(得分:2)
如果你想在O(n)时间内完成
如果你这样做是在Java中你需要额外的空间来构建新的String等。如果你在C中这样做,你可以简单地用空字符终止String并完成程序而不需要任何额外的空间。
答案 4 :(得分:1)
我认为您的导师不希望您拨打Character.isLetter('a')
,因为它总是true
。
在没有正则表达式的情况下构建结果的最简单方法是使用StringBuilder
和switch
语句,如下所示:
String s = "quick brown fox jumps over the lazy dog";
StringBuffer res = new StringBuffer();
for (char c : s.toCharArray()) {
switch(c) {
case 'a': // Fall through
case 'u': // Fall through
case 'o': // Fall through
case 'i': // Fall through
case 'e': break; // Do nothing
default: // Do something
}
}
s = res.toString();
System.out.println(s);
您也可以使用等效的if
替换它,如下所示:
if (c!='a' && c!='u' && c!='o' && c!='i' && c!='e') {
// Do something
}