6

このプログラムの目標は、単語リストから 6 つの母音 (を含む) をすべて含む単語を返すことyです。母音がアルファベット順に並んでいるところ。たとえば、答えは次のようになりますy。現在、プログラムは単語を返しません。containsVowelsその方法は間違っていないと思います。

public static void question11() {
    System.out.println("Question 11:");
    System.out.println("All words that have 6 vowels once in alphabetical order: ");
    String vowelWord = "";

    for (int i = 1; i< WordList.numWords(); i++) {
        if (containsVowels(WordList.word(i))) {       
            if (alphabetical(WordList.word(i))) {
                vowelWord = WordList.word(i);
                System.out.println(vowelWord);
            }
        }
    }

    return;
}

public static boolean alphabetical(String word) {
    int vowelPlaceA = 0;
    int vowelPlaceE = 0;
    int vowelPlaceI = 0;
    int vowelPlaceO = 0;
    int vowelPlaceU = 0;
    int vowelPlaceY = 0;

    for (int i = 0; i < word.length(); i++) {
        if (word.charAt(i) == 'a') {
            vowelPlaceA = i;
        }
        if (word.charAt(i) == 'e') {
             vowelPlaceE = i;
        }
        if (word.charAt(i) == 'i') {
             vowelPlaceI = i;
        }
        if (word.charAt(i) == 'o') {
             vowelPlaceO = i;
        }
        if (word.charAt(i) == 'u') {
             vowelPlaceU = i;
        }
        if (word.charAt(i) == 'y') {
             vowelPlaceY = i;
        }
        //check a alphabetical
        if(vowelPlaceA > vowelPlaceE || vowelPlaceA > vowelPlaceI || vowelPlaceA > vowelPlaceO ||
          vowelPlaceA > vowelPlaceU || vowelPlaceA > vowelPlaceY) {
             return false;
        }
        //check e alphabetical
        if(vowelPlaceE > vowelPlaceI || vowelPlaceE > vowelPlaceO ||
          vowelPlaceE > vowelPlaceU || vowelPlaceE > vowelPlaceY) {
             return false;
        }
        //i
        if(vowelPlaceI > vowelPlaceO || vowelPlaceI > vowelPlaceU || vowelPlaceI > vowelPlaceY) {
             return false;
        }
        //o
        if(vowelPlaceO > vowelPlaceU || vowelPlaceO > vowelPlaceY) {
             return false;
        }
        //u
        if(vowelPlaceU > vowelPlaceY) {
             return false;
        }    
    }
    return true;
}

public static boolean containsVowels(String word) {
    String vowels = "aeiouy";
    if (word.contains(vowels)) {
        return true;
    }
    return false;
}
4

4 に答える 4

6

メソッドで正規表現を使用するだけです。

public static boolean containsVowels(String word) {
    return Pattern.matches(".*a.*e.*i.*o.*u.*y.*", word);
}
于 2013-11-08T14:33:28.400 に答える
3

正規表現を使用する

if (word.matches("[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]")){
    //found one
}

Where[^aeiou]*は、0 個以上の子音を意味します。正規表現では...^の中のものは何もないことを意味します。[]

これは最速の解決策ではないかもしれませんが、明らかです。特に、私のように何度もハードコーディングせずに正規表現を作成する場合[^aeiou]

編集: @Patrick の正規表現は優れています。

于 2013-11-08T14:34:08.810 に答える
2

次のように、文字列「aeiouy」が単語の部分文字列である場合にのみ、containsVowels は true を返します。

"preaeiouy","aeiouypost","preaeiouypost"

これはより正しい方法です。

public static boolean containsVowels(String word) {
    String vowels = "aeiouy";
    if (word == null || word.length() < vowels.length())
        return false;
    int counter = 0;
    int vowelCounter = 0;
    //Loop until the whole word has been read, or all vowels found
    while(counter<word.length() && vowelCounter < vowels.length()){
        if (word.charAt(counter) == vowels.charAt(vowelCounter)){
            vowelCounter++;
        }
        counter++;
    }
    return vowelCounter == vowels.length();
}
于 2013-11-08T14:31:03.687 に答える
2

正規表現なしのロジック。

public static boolean containsVowels(String word) throws NullPointerException {
    List<String> vowels = new ArrayList<String>(
                               Arrays.asList("a", "e", "i", "o", "u", "y"));
    String lastVowel = vowels.get(vowels.size() - 1);
    for (String c : vowels) {
        //false is returned if one vowel can't be found
        if (!word.contains(c)) {
            return false;
        }
        //true is returned once the last vowel is found (as the previous ones)
        if (c.equals(lastVowel)) {
            return true;
        }
    }
    //will never go out of the loop
}
于 2013-11-08T14:31:48.190 に答える