Porównania stringów.

0

Witam, mam pytanie - chcialbym z tekstu wczytanego z pliku wylowic najczesciej wystepujace zdania. Na przyklad 2 listy zawierajace tytuly gier - jesli jakis tytul wystapi na obu, chcialbym to wylapac.
Zastanawialem sie jak to zrobic i najlatwiej mozna chyba tak: wczytac pliki do tablic i po kolei porownywac - wziac string o indeksie 0 z tablicy 1, porownac ze stringiem o indeksie 0 z tablicy 2, potem ze stringiem o indeksie 1 z tablicy 2, itd. Jesli porownanie da "true", zapisac dany string i liczbe wystapien.
Takie rozwiazanie mozna chyba stosowac do krotkich list i malej ilosci list. Gdybym jednak mial 100 list, kazda z wieloma tytulami? Jak to najlepiej zrobic? Czy jest w Javie jakies gotowe narzedzie do takich zabaw?

0

Może HashMap<String,Integer>, jeśli w kolekcji nie ma szukanego Stringu s, to dopisujesz (s,1), jeśli jest, to zwiększasz licznik o 1.

0

Podaj przykład, bo nie za bardzo rozumiem mieszania "zdań" z "tytułami".

0

Ok, przyklad:

lista1.txt, zawartosc:
starcraft: brood war, warcraft 3, grim fandango, c&c: red alert
lista2.txt, zawartosc:
doom 2: hell on earth, lemmings, world of warcraft, grim fandango

Cel: porownac oba pliki, dostac wynik typu: grim fandango - 2, starcraft: brood war - 1, etc.

Piszac "zdania" i "tytuly" mialem na mysli tytuly skladajace sie z wielu wyrazow, przepraszam za niejasny opis.

0

No do dokładnie tak, jak napisał @bogdans. Tylko sam siebie wprowadzasz w błąd - nie chcesz porównywać, tylko zliczać wystąpienia tych gier ;)
Wczytujesz kolejno pliki, dla każdego z nich wczytujesz linie, każdą linię wsadzasz - zgodnie z algorytmem zaproponowanym przez @bogdans - do HashMapy a potem tylko wyciągasz wartości dla każdej z gier po kolei.

0

No tak, zliczanie poprzez porownywanie :)
Co do pomyslu z HashMap - rozumiem, ze wszystkie pliki otwieram (moze ich byc duzo), czytam po linii (tych tez moze byc sporo), wrzucam wszystko do jednej kolekcji. Ale dalej chyba nie lapie, mozecie troche obszerniej? Jak wyciagnac z tej ogromnej kolekcji powtarzajace sie elementy i zliczac ilosc powtorzen kazdego elementu?

0
HashMap<String,Integer> games = new HashMap<String,Integer>();
...
if(games.containsKey(line))
{
     games.put(line, games.get(line)+1);
}
else
{
     games.put(line,1);
}
0

Dokładnie tak, jak napisał bogdans :) HashMapa to taka kolekcja przechowująca pary - w tym wypadku Twoje słowo i licznik wystąpień tego słowa. Potem, żeby się dowiedzieć, ile razy dane słowo wystąpiło, pobierasz wartość licznika skojarzoną z danym słowem i tyle :)

0

Chyba lapie, dzieki. Jeszcze cos - jak rozumiem HashMap nie dba o kolejnosc elementow, wiec po dodaniu wszystkich linii z wszystkich plikow musialbym recznie wybierac wartosc zmiennej line? Czy jakos elegancko przeiterowac cala kolekcje porownujac wszystko ze wszystkim? W zwyklej tablicy to calkiem proste - zaczynam od zerowego indeksu pierwszej tablicy i porownuje z wszystkimi indeksami drugiej tablicy, potem biore kolejny indeks pierwszej tablicy, porownuje ze wszystkimi indeksami drugiej tablicy, itd. Jak przy uzyciu HashMap?

0

Nie rozumiem co to znaczy ręcznie wybierać.
Jeśli interesuje Cię konkretna gra, to

System.out.println("grim fandango - "+games.get("grim fandango"));

Jeśli wszystkie gry, to

Set<String> names = games.keySet();
for(String name: names)
{
    System.out.println(name+" - "+games.get(name));
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1