3

我是编程的初学者,正在编写一个Java方法来删除字符串中的元音,但我不知道如何解决这个错误";" expected::

public String disemvowel(String s) {

    boolean isVowel(char c);
    if (c == 'a') {
        return true;
    } else if if (c == 'e') {
        return true;
    } else if if (c == 'i') {
        return true;
    } else if if (c == 'o') {
        return true;
    } else if if (c == 'u') {
        return true;
    }
    String notVowel = "";
    int l = s.length();
    for (int z = 0; z <= l; z++) {


        if (isVowel == "false") {
            char x = s.charAt(z);
            notVowel = notVowel + x;
        }
    }
    return notVowel;
}
4

5 回答 5

20
 String str= "Your String";
 str= str.replaceAll("[AEIOUaeiou]", "");
 System.out.println(str);
于 2013-10-12T01:10:35.043 回答
8

一个更简单的方法是执行以下操作:

String string = "A really COOL string";
string = string.replaceAll("[AaEeIiOoUu]", "");
System.out.println(string);

这会将正则表达式[AaEeIiOoUu]应用于string. 此表达式将匹配字符组中的所有元音[AaEeIiOoUu]并将它们替换为""空字符串。

于 2013-10-12T00:58:39.517 回答
1

你有很多语法错误。

  • boolean isVowel(char c); - 不知道你在做什么。如果您希望它作为一个单独的方法,请将其分开(并且不要在其后放置分号,这将是无效的语法。

  • else if if是无效的语法。如果你正在做一个else if,那么你只需要一个if

  • 即使代码可以编译,for (int z = 0; z <= l; z++)也会导致您退出字符串。删除有<=利于<.
  • isVowel == "false"永远不会工作。您正在将字符串与布尔值进行比较。你想要!isVowel

把语法错误放在一边,这样想。

  • 您有一个包含元音的字符串。您希望有一个不包含元音的字符串。
  • 最直接的方法是遍历字符串,将所有非元音字符放入一个单独的字符串中,然后将其返回。

有趣的是,你所拥有的半方法可以完成确定某物是否是元音的逻辑。将其提取到自己的方法中。然后,在您的其他方法中调用它。一定要考虑大写字母。

我把剩下的留给读者作为练习。

于 2013-10-12T01:11:24.017 回答
1

这是您的代码,没有更改任何逻辑,但解读了 isVowel 方法:

public String disemvowel(String s) {

    // Removed the "isVowel" method from here and moved it below

    String notVowel = "";
    int l = s.length();
    for (int z = 0; z <= l; z++) {
        // Note that the "isVowel" method has not been called.
        // And note that, when called, isVowel returns a boolean, not a String.
        // (And note that, as a general rule, you should not compare strings with "==".)
        // So this area needs a lot of work, but we'll start with this
        boolean itIsAVowel = isVowel(s.charAt(z));
        // (I made the variable name "itIsAVowel" to emphasize that it's name has nothing to do with the method name.
        // You can make it "isVowel" -- the same as the method -- but that does not in any way change the function.)
        // Now take it from there...
        if (isVowel == "false") {
            char x = s.charAt(z);
            notVowel = notVowel + x;
        }
    }
    return notVowel;
}

// You had this line ending with ";"
boolean isVowel(char c) {
    if (c == 'a') {
        return true;
   // Note that you coded "if if" on the lines below -- there should be only one "if" per line, not two        
    } else if if (c == 'e') {
        return true;
    } else if if (c == 'i') {
        return true;
    } else if if (c == 'o') {
        return true;
    } else if if (c == 'u') {
        return true;
    }
    // You were missing this final return
    return false;
}

(是的,我知道这应该是注释,但您不能将格式化的代码放在注释中。)

于 2013-10-12T01:12:49.793 回答
0

你可以尝试这样的事情:

public static String removeVowels(final String string){
    final String vowels = "AaEeIiOoUu";
    final StringBuilder builder = new StringBuilder();
    for(final char c : string.toCharArray())
        if(vowels.indexOf(c) < 0)
            builder.append(c);
    return builder.toString();
}
于 2013-10-12T01:12:21.267 回答