使用Java删除字符串中的所有元音

我正在为我的计算机科学课程做作业。 任务是获取用户输入,删除所有元音,然后打印新语句。

我知道我可以使用这段代码轻松完成:

string.replaceAll("[aeiou](?!\\b)", "") 

但我的导师希望我使用嵌套的if和else if语句来实现结果。 现在我正在使用这样的东西:

 if(Character.isLetter('a')){ 'do something' }else if(Character.isLetter('e')){ 'do something else' 

但我不知道在ifelse 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的情况下构建结果的最简单方法是使用StringBuilderswitch语句,如下所示:

 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 }