Так в java 8 или более поздней версии, есть ли какие-либо строковые методы API, которые
упростит требование.
Если вы хотите, в Java 8 и выше вы можете использовать потоковый API, сначала для построения карты отсчетов (в Java 9, начиная с str.chars()
), затем для определения того, содержит ли карта разные подсчеты. Считаешь ли ты, что это проще, вероятно, больше зависит от вкуса (я бы посчитал это более продвинутым, и мне это нравится).
Вы можете искать детали в Интернете и переполнении стека. Если вы застряли, пожалуйста, напишите новый вопрос, мы здесь, чтобы помочь.
РЕДАКТИРОВАТЬ: Я думал, что у вас уже есть время, чтобы написать свой собственный код, поэтому я выкладываю мой для вас, чтобы вы могли сравнить, если хотите, не отвлекаясь от обучения.
public static boolean isEven(String s) {
if (s.isEmpty()) {
return true;
}
Map<Integer, Long> counts = s.chars()
.boxed()
.collect(Collectors.groupingBy(ch -> ch, Collectors.counting()));
Long someCount = counts.values().iterator().next();
return counts.values()
.stream()
.allMatch(someCount::equals);
}
Давайте попробуем:
for (String s : new String[] {
// Even strings
"FFHHIIJJ", "UUURROOOR", "HHEEPPDIDI", "LLLQQMQMM", "abaccb", "abc", "d", "",
// Odd strings
"IIREELO", "PPGIUUUUS", "HRTRDFF", "HIYUDHDA", "abbc", "aabcc" }) {
System.out.format("%-11s %b%n", s, isEven(s));
}
Вывод:
FFHHIIJJ true
UUURROOOR true
HHEEPPDIDI true
LLLQQMQMM true
abaccb true
abc true
d true
true
IIREELO false
PPGIUUUUS false
HRTRDFF false
HIYUDHDA false
abbc false
aabcc false