Написал такой код, но с его помощью я получаю число повторений буквы в строке, как получить саму букву? никак не могу сообразить
public String getMostCommonVowelFromString(String[] array) { //найти самую частую гласную букву в строке
String result;
int a = 0;
int e = 0;
int i = 0;
int o = 0;
int u = 0;
String s;
for (int j = 0; j < array.length; j++) {
s = array[j];
Matcher m = Pattern.compile("([AaEeIiOoUu])").matcher(s);
while (m.find()) {
if (m.group().matches("[aA]")) {
a++;
} else if (m.group().matches("[eE]")) {
e++;
} else if (m.group().matches("[iI]")) {
i++;
} else if (m.group().matches("[oO]")) {
o++;
} else if (m.group().matches("[uU]")) {
u++;
}
}
}
System.out.println("A - " + a);
System.out.println("E - " + e);
System.out.println("I - " + i);
System.out.println("O - " + o);
System.out.println("U - " + u);
int[] sortedArray = new int[5];
sortedArray[0] = a;
sortedArray[1] = e;
sortedArray[2] = i;
sortedArray[3] = o;
sortedArray[4] = u;
Arrays.sort(sortedArray);
result = String.valueOf(sortedArray[4]); //возвращает число а надо букву соответствующую этому числу
return result; //как вернуть имя переменной а не значение?
}
Задача достаточно тривиальна, но при этом Ваш код абсолютно нечитаемый. Представьте себе, что будет, когда сложность задачи возрастет в сотню раз... Посему предлагаю Вам сделать так:
private final static Set<Character> VOWEL_CHARS = Stream.of('A','a','E','e','I','i','O','o','U','u').collect(Collectors.toSet());
public Map <String, Long> getMostCommonVowelFromString(String[] array) {
return Arrays.stream(array)
.map(s -> s.chars().mapToObj(c -> (char)c).toArray(Character[]::new))
.flatMap(a -> Arrays.stream(a))
.filter(c->VOWEL_CHARS.contains(c))
.collect(Collectors.groupingBy(ch -> String.valueOf(ch).toUpperCase(), Collectors.counting()));
}
Этот метод вернет вам коллекцию типа Map , где ключ - это буква, а значение - количество ее повторений.
Set<Character> vowels = "aeiou".chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toSet());
String str = "Java 8 RulezZz";
Character mostFrequent = str.toLowerCase()
.chars()
.mapToObj(c -> (char) c)
.filter(vowels::contains)
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting()))
.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.get();
При сортировке соответствие символа и переменной теряется. Но сортировка и не нужна - достаточно найти максимальное значение из переменных a,e,i,o,u с помощью операторов сравнения и if
Кроме того, использование регулярных выражений для такой задачи несколько расточительно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При нажатии кнопки меню в MainActivity обновляются данные, изпользуемые в RecyclerViewСам рецайклер сидит во фрагменте, пытаюсь сообщить ему, что данные...
В примерах кода в своей книге ("Структуры данных и алгоритмы") Лафоре не пользуется методом lengthА отдельно объявляет дину массива, например...