這是我承認的功課。但這對我來說太難了,我需要一些建議。方法getWordsInLyrics()將文本拆分為單詞。現在如何獲得最常見的第一個字母,以及以該字母開頭的單詞?將其存盤在HashMap<String letter, LinkedList<String words >> wordBegins = new HashMap<>();必須使用charAt(0)嗎?
import java.util.HashMap;
import java.util.LinkedList;
public class LyricsCounter {
private static final String LYRICS = "Dwunastu braci, wierzac w sny, zbadalo mur od marzen strony,\n"
"A poza murem plakal glos, dziewczecy glos zaprzepaszczony.\n"
"I pokochali glosu dzwiek i chetny domysl o Dziewczynie,\n"
"I zgadywali ksztalty ust po tym, jak spiew od zalu ginie...\n"
"Mowili o niej: \"lka, wiec jest!\" - I nic innego nie mowili,\n"
"I przezegnali caly swiat - i swiat zadumal sie w tej chwili...\n"
"Porwali mloty w twarda dlon i jeli w mury tluc z loskotem!\n"
"I nie wiedziala slepa noc, kto jest czlowiekiem, a kto mlotem?\n"
"\"O, predzej skruszmy zimny glaz, nim smierc Dziewczyne rdza powlecze!\" -\n"
"Tak, walac w mur, dwunasty brat do jedenastu innych rzecze.\n"
"Ale daremny byl ich trud, daremny ramion sprzeg i usil!\n"
"Oddali ciala swe na strwon owemu snowi, co ich kusil!\n"
"lamia sie piersi, trzeszczy kosc, prochnieja dlonie, twarze bledna...\n"
"I wszyscy w jednym zmarli dniu i noc wieczysta mieli jedna!\n"
"Lecz cienie zmarlych - Boze moj! - nie wypuscily mlotow z dloni!\n"
"I tylko inny plynie czas - i tylko mlot inaczej dzwoni...\n"
"I dzwoni w przod! I dzwoni wspak! I wzwyz za kazdym grzmi nawrotem!\n"
"I nie wiedziala slepa noc, kto tu jest cieniem, a kto mlotem?\n"
"\"O, predzej skruszmy zimny glaz, nim smierc Dziewczyne rdza powlecze!\" -\n"
"Tak, walac w mur, dwunasty cien do jedenastu innych rzecze.\n"
"Lecz cieniom zbraklo nagle sil, a cien sie mrokom nie opiera!\n"
"I powymarly jeszcze raz, bo nigdy dosc sie nie umiera...\n"
"I nigdy dosc, i nigdy tak, jak pragnie tego ow, co kona!...\n"
"I znikla tresc - i zginal slad - i powiesc o nich juz skonczona!\n"
"Lecz dzielne mloty - Boze moj - mdlej nie poddaly sie zalobie!\n"
"I same przez sie bily w mur, huczaly spizem same w sobie!\n"
"Huczaly w mrok, huczaly w blask i ociekaly ludzkim potem!\n"
"I nie wiedziala slepa noc, czym bywa mlot, gdy nie jest mlotem?\n"
"\"O, predzej skruszmy zimny glaz, nim smierc Dziewczyne rdza powlecze!\" -\n"
"Tak, walac w mur, dwunasty mlot do jedenastu innych rzecze.\n"
"I runal mur, tysiacem ech wstrzasajac wzgorza i doliny!\n"
"Lecz poza murem - nic i nic! Ni zywej duszy, ni Dziewczyny!\n"
"Niczyich oczu ani ust! I niczyjego w kwiatach losu!\n"
"Bo to byl glos i tylko - glos, i nic nie bylo oprocz glosu!\n"
"Nic - tylko placz i zal i mrok i niewiadomosc i zatrata!\n"
"Takiz to swiat! Niedobry swiat! Czemuz innego nie ma swiata?\n"
"Wobec klamliwych jawnie snow, wobec zmarnialych w nicosc cudow,\n"
"Potezne mloty legly w rzad, na znak spelnionych godnie trudow.\n"
"I byla zgroza naglych cisz. I byla proznia w calym niebie!\n"
"A ty z tej prozni czemu drwisz, kiedy ta proznia nie drwi z ciebie?";
private static String[] getWordsInLyrics() {
return LYRICS.split("\\W ");
}
public static void main(String[] args) {
HashMap<String, LinkedList<String>> wordBegins = new HashMap<>();
}
}
uj5u.com熱心網友回復:
public static void main(String[] args) {
HashMap<String, LinkedList<String>> wordBegins = new HashMap<>();
String[] arr = getWordsInLyrics();
for (int i = 0; i < arr.length; i ) {
String firstLetter = arr[i].substring(0, 1);
if (!wordBegins.containsKey(firstLetter)) {
wordBegins.put(firstLetter, new LinkedList<String> () );
}
wordBegins.get(firstLetter).add(arr[i]);
}
System.out.println(wordBegins);
}
}
要修改的任何提示,因此列印僅回傳以出現最多的字母開頭的單詞?
uj5u.com熱心網友回復:
在填充地圖時可以輕松跟蹤最常用的字符及其頻率,然后在回圈后檢索適當的單詞串列:
Map<Character, LinkedList<String>> map = new HashMap<>();
char maxChar = ' ';
int maxFreq = 0;
for (String word : LYRICS.split("\\W ")) {
char letter = Character.toLowerCase(word.charAt(0));
map.computeIfAbsent(letter, k -> new LinkedList<>()).add(word);
int freq = map.get(letter).size();
if (maxFreq < freq) {
maxFreq = freq;
maxChar = letter;
}
}
System.out.println("Most frequent: " maxChar "; frequency = " maxFreq);
System.out.println(map.get(maxChar));
輸出:
Most frequent: i; frequency = 47
[I, i, I, I, innego, I, i, i, I, innych, ich, i, ich, I, i, I, inny, i, inaczej, I, I, I, I, innych, I, I, i, I, i, i, I, i, I, innych, I, i, i, I, i, i, i, i, i, i, innego, I, I]
如果大寫和小寫字母分開計算而不應用Character.toLowerCase:
char letter = word.charAt(0);
那么冠軍是:
Most frequent: n; frequency = 38
[niej, nic, nie, nie, noc, nim, na, noc, nie, nawrotem, nie, noc, nim, nagle, nie, nigdy, nie, nigdy, nigdy, nich, nie, nie, noc, nie, nim, nic, nic, ni, niczyjego, nic, nie, niewiadomosc, nie, nicosc, na, naglych, niebie, nie]
可以使用 Stream API 輸出前 10 個最常見的第一個字母,以按串列的大小對地圖中的條目進行排序:
final int mx = maxFreq;
map.entrySet().stream()
.sorted(Comparator.<Map.Entry<Character, LinkedList<String>>>comparingInt(e -> e.getValue().size())
.reversed()
.thenComparing(Map.Entry.comparingByKey())
)
.limit(10)
.forEach(e -> System.out.println(e.getKey() " = " e.getValue().size()));
輸出(不區分大小寫的檢查):
i = 47
n = 42
s = 36
w = 34
d = 31
m = 30
p = 28
t = 26
z = 25
c = 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383169.html
