文のリストを取得して、母音が最も多い単語を返す方法について誰かがアイデアを持っているかどうか疑問に思っていました.
母音を含む単語を数え、その数を返す方法を知っています。母音が最も多い単語を返すことができません..
どんな提案でも大歓迎です
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」値をメソッドに渡したいと思うでしょう。
シンプルで読みやすく、正しいと私が考えるものは次のとおりです。
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;
}
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;
単語を文字列変数に格納し、ループが終了したら文字列を返します。
すべての文を複数の単語に分割して (この単語がヒントです) 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));
}