2

文のリストを取得して、母音が最も多い単語を返す方法について誰かがアイデアを持っているかどうか疑問に思っていました.

母音を含む単語を数え、その数を返す方法を知っています。母音が最も多い単語を返すことができません..

どんな提案でも大歓迎です

4

5 に答える 5

3
String myString = "Java is magical";

// 1. Split your string into an array of words.
String[] words = myString.split(" ");

// 2. Initialise a max vowel count and current max count string variable
int maxVowelCount = 0;
String wordWithMostVowels = "";

// 3. Iterate over your words array.
for (String word : words) {
    // 4. Count the number of vowel in the current word
    int currentVowelCount = word.split("[aeiou]", -1).length;

    // 5. Check if it has the most vowels
    if (currentVowelCount > maxVowelCount) {

        // 6. Update your max count and current most vowel variables
        wordWithMostVowels = word;
        maxVowelCount = currentVowelCount;
    }
}

// 6. Return the word with most vowels
return wordWithMostVowels;

おそらく、この機能をメソッドにラップして、「myString」値をメソッドに渡したいと思うでしょう。

于 2012-11-02T02:35:49.800 に答える
2

シンプルで読みやすく、正しいと私が考えるものは次のとおりです。

public static String findMaxVowels(Collection<String> text) {
    String best = null;
    int max = 0;
    for (String line : text) {
        // may need a better definition of "word"
        for (String word : line.split("\\s+")) {
            int count = countChars(word.toLowerCase(), "aeiou");
            if (count > max) {
                max = count;
                best = word;
            }
        }
    }
    return best;
}

public static int countChars(String text, String chars) {
    int count = 0;
    for (char c : text.toCharArray())
        if (chars.indexOf(c) >= 0)
            count += 1;
    return count;
}
于 2012-11-02T03:54:26.433 に答える
0
String[] words = yourString.split(" ");
int max = 0;
for(String myStr: words)
    max = Math.max(max,myStr.split("[aeiou]").length);
for(String myStr: words)
    if(myStr.split("[aeiou]").length == max)
        return myStr;
于 2012-11-02T02:24:19.737 に答える
0

単語を文字列変数に格納し、ループが終了したら文字列を返します。

于 2012-11-02T02:01:10.250 に答える
0

すべての文を複数の単語に分割して (この単語がヒントです) List、母音の最大量を持つ単語を取得できます。
文ごとに 1 つの単語 (「最大」) になり、このList単語をもう一度処理すると (ここで適切な再帰呼び出しを行うことができます)、テキスト内で母音の量が最も多い単語が取得されます。特に、 Collections

によって提供される静的メソッドを確認することをお勧めします。

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)

そして最終的に

public static <T> void sort(List<T> list, Comparator<? super T> c)


あなたがしなければならないのは、母音の数が最も多い 2 つの単語を決定するComparatorを実装することだけです。これはほとんど 2 行のコードであり、宿題のように聞こえます。

編集:最後に、彼はいたるところにスポイラーを持っているので、その解決策があります. メモ化を使用すると、トレーダーのパフォーマンスを向上させる方法がありますが、それは私が推測するポイントではありません

final static Comparator <String> vowelComparator = new Comparator<String>() {
    @Override
    public final int compare(final String word1, final String word2) {
        return vowelCount(word1) - vowelCount(word2);
    }

    private final int vowelCount(final String word) {
        int count = 0;
        for (final char c : word.toCharArray()) {
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
                count++;
        }
        return count;
    }
};

public static void main(String...args) {
    //Sentences
    final List<String> sentences = new ArrayList<String>(3){{
        add("This is my first line");
        add("Hohoho is my second astonishing line");
        add("And finally here is my last line");
    }};

    //Store the words with highest number of vowels / sentence
    final List<String> interestingWords = new LinkedList<>();
    for (final String sentence : sentences) {
        interestingWords.add(Collections.max(Arrays.asList(sentence.split(" ")), vowelComparator));     
    }

    System.out.println(Collections.max(interestingWords, vowelComparator));
}   
于 2012-11-02T02:15:37.243 に答える