4

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

我知道我可以很容易地用这段代码做到这一点:

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

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

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

if但我不确定在andelse if语句中该做什么。我应该删除这封信吗?还是有更好的方法来做到这一点?

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

4

5 回答 5

7

我认为他可能想要你读取字符串,创建一个新的空字符串(调用它s),循环输入并添加所有不是元音的字符s(这需要一个if语句)。然后,您只需打印s.


编辑:您可能需要考虑使用 a StringBuilder,因为重复的字符串连接会影响性能,但想法是一样的。但老实说,我怀疑这会对这类事情产生明显的影响。

于 2012-10-31T21:13:43.250 回答
4
Character.isLetter('a')

Character.isLetter(char)告诉你你给它的值是否是一个字母,这在这种情况下没有帮助(你已经知道“a”是一个字母)。

您可能想使用相等运算符 ,==来查看您的角色是否为“a”,例如:

char c = ...
if(c == 'a') {
    ...
} else if (c == 'e') {
    ...
}

您可以通过多种方式获取 String 中的所有字符:

于 2012-10-31T21:14:41.823 回答
3

我认为您可以遍历字符检查是否为元音,如下所示:

  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
于 2012-10-31T21:20:25.783 回答
3

如果你想在 O(n) 时间内完成

  • 遍历字符串的字符数组
  • 如果您击中元音,则跳过索引并将下一个非元音字符复制到元音位置。
  • 您将需要两个计数器,一个遍历整个字符串,另一个跟踪最后一个元音位置。
  • 到达数组末尾后,查看元音跟踪器计数器 - 它是否位于元音上,如果不是,则可以从索引 0 到“vowelCounter-1”构建新字符串。

如果你在 Java 中这样做,你将需要额外的空间来构建新的字符串等。如果你在 C 中这样做,你可以简单地用空字符终止字符串并在没有任何额外空间的情况下完成程序。

于 2012-10-31T21:47:04.883 回答
2

我不认为你的教练想让你打电话Character.isLetter('a'),因为它总是true

在不使用正则表达式的情况下构建结果的最简单方法是使用 a StringBuilderand aswitch语句,如下所示:

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
}
于 2012-10-31T21:20:58.433 回答