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

时间:2012-10-31 21:11:43

标签: java java.util.scanner

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

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

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

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

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

但我不确定在ifelse if语句中该怎么做。我应该删除这封信吗?或者有更好的方法吗?

看到这是我的作业,我不想要完整的答案只是提示。谢谢!

5 个答案:

答案 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)时间内完成

  • 迭代String
  • 的字符数组
  • 如果您点击元音,请跳过索引并将下一个非元音字符复制到元音位置。
  • 您将需要两个计数器,一个用于遍历整个字符串,另一个用于跟踪最后一个元音位置。
  • 到达数组的末尾后,查看元音跟踪器计数器 - 它是否位于元音上,如果没有,那么新的String可以从索引0构建到'vowelCounter-1'。

如果你这样做是在Java中你需要额外的空间来构建新的String等。如果你在C中这样做,你可以简单地用空字符终止String并完成程序而不需要任何额外的空间。

答案 4 :(得分:1)

我认为您的导师不希望您拨打Character.isLetter('a'),因为它总是true

在没有正则表达式的情况下构建结果的最简单方法是使用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
}