使用Java删除字符串中的所有元音
我正在为我的计算机科学课程做作业。 任务是获取用户输入,删除所有元音,然后打印新语句。
我知道我可以使用这段代码轻松完成:
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(char)告诉你你给它的值是否是一个字母,在这种情况下没有用(你已经知道“a”是一个字母)。
您可能希望使用等于运算符==
来查看您的角色是否为“a”,如:
char c = ... if(c == 'a') { ... } else if (c == 'e') { ... }
您可以通过多种方式获取String中的所有字符:
- 作为String.toCharArray()的数组
- 使用String.charAt(索引)从String获取每个字符
我认为他可能想要的是你读取字符串,创建一个新的空字符串(称之为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)时间内完成
- 迭代String的字符数组
- 如果您点击元音,请跳过索引并将下一个非元音字符复制到元音位置。
- 您将需要两个计数器,一个用于遍历整个字符串,另一个用于跟踪最后一个元音位置。
- 到达数组的末尾后,查看元音跟踪器计数器 – 它是否位于元音上,如果没有,那么新的String可以从索引0构建到’vowelCounter-1’。
如果你这样做是在Java中你将需要额外的空间来构建新的String等。如果你在C中这样做,你可以简单地终止带有空字符的字符串并完成程序,没有任何额外的空间。
我不认为你的导师想要你叫Character.isLetter('a')
因为它总是true
。
在没有regexp的情况下构建结果的最简单方法是使用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 }