我做我的计算机科学课程家庭作业。 任务是获得用户输入,删除所有的元音,然后打印新的声明。
我知道我可以很容易地使用此代码做到这一点:
string.replaceAll("[aeiou](?!\\b)", "")
但我的教练希望我使用嵌套if和else if语句来达到的效果。 现在,我使用的是这样的:
if(Character.isLetter('a')){
'do something'
}else if(Character.isLetter('e')){
'do something else'
但我不知道该怎么里面做if
和else if
语句。 我应该删除信? 还是有更好的方式来做到这一点?
见此,因为这是我的功课,我不想完全的答案只是提示。 谢谢!
Character.isLetter('a')
Character.isLetter(炭)告诉你,如果你给它的值是一个字母,这是不是在这种情况下,有帮助(你已经知道,“一”是一个字母)。
你可能想使用等于运算符, ==
,看看你的角色是一个“A”,如:
char c = ...
if(c == 'a') {
...
} else if (c == 'e') {
...
}
你可以得到所有以多种方式与字符串的字符:
- 作为以与阵列String.toCharArray()
- 使用获得每个字符从字符串String.charAt(指数)
我想他可能想要的是你读取的字符串,创建一个新的空字符串(称之为s
),循环在你的输入,并添加所有没有元音的字符s
(这需要一个if
语句)。 然后,您只需将打印内容s
。
编辑:您可能要考虑使用StringBuilder
这个,因为重复的字符串连接可以影响性能,但这个想法是一样的。 但说实话,我怀疑它将使这种类型的东西一个明显的区别。
我想你可以通过字符检查迭代如果是元音或下面不是:
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
如果你想这样做在O(n)的时间
- 遍历您的字符串的字符数组
- 如果碰到一个元音跳过指数并复制下一个非元音字符元音位置。
- 您将需要两个柜台,其中一个在整个字符串进行迭代,它记录了最后一个元音位置的其他。
- 当你到达数组的末尾,看看元音跟踪计数器 - 它坐在一个元音,如果不是那么新的字符串可以建立索引0到“vowelCounter-1”。
如果你这样做是在Java中,你将需要额外的空间来建立新的字符串等。如果你用C做它,你可以简单地用一个空字符终止字符串,并完成该计划,没有任何额外的空间。
我不认为你的老师想让你打电话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
}