Zdravím, měl bych prosbu ohledně programování v Javě. Jedná se o napsání tří metod, jedna z načteného textového souboru zjistí deset nepoužívanějších, deset nejméně používaných slov a deset nejdelších slov. Myslíte, že by mi s tím někdo pomohl?
#1Evrokorps
Takže nejprve si musíš načíst ten soubor :) to myslím není třeba rozebírat:) Dále budeš potřebovat načtený String rozdělit do pole, předpokládám že za každým slovem je mezera tak ten načtený String rozdělíš podle mezer do pole:
String[] slova = text.split(" ");
kde text je právě ten načtený soubor ve Stringu.
potom si uděláš metodu např. nejpouzivanejsiSlova(String[] slova); kde ten rozdělený String na slova předáš jako parametr... V té metodě pak například přes cyklus budeš postupně kontrolovat slova a někde si zapisovat kolikrát je dané slovo v poli...
druhou metodu uděláš obdobně...
a v té třetí budeš kontrolovat délku těch slov a ty nejdelší pak vrátíš :)
Takhle to třeba můžeš udělat, klidně bych ti tu dal celý kód ale zkus si to udělat nejdříve sám ať to aspoň trochu pochopíš a naučíš:)
#1Evrokorps
Zdravím, sedím nad tím už čtvrtý den a vše k čemu jsem se dostal je načtení a výpis do souboru. Další metody nevím jak napsat a také nevím jak převést soubor do stringu když soubor načítám do proměnné int... (myšlenku chápu, ale nedokážu to napsat). Oslovil jsem i známého co pracuje jako programátor, ale je časově velmi vytížen a nemá na mě mnoho času. Ze zdrojového kódu chápu jak program pracuje, ale z toho jak program pracuje napsat kód je pro mě téměř nemožné :( s Javou jsem teprve začal, a dostal jsem se až k práci se soubory kde jsem se zasekl na této úloze.
#4Evrokorps
K načtení toho souboru použij třídu BufferedReader a metodu readLine(); metoda ti načte ze souboru jeden řádek a vrátí ti ho jako String... Takže to hodíš do cyklu... Takže např. vytvoříš si ten BufferedReader a StringBuilder, v cyklu budeš načítat ze souboru řádek pomocí toho BufferedReader a do StringBuilder budeš postupně přidávat načtené řádky...Když už budeš mít načtené všechny řádky (celý soubor) vrátí ti metoda readLine(); hodnotu null takže podmínka cyklu je myslím jasná :) nakonec si ten StringBuilder převedeš do Stringu a vrátíš ten String (return sb.toString(); kde sb je právě ten StringBuilder)... Todle je jedna z možností jak načíst ten soubor do Stringu... :)
#5sakal91
Děkuji, ale vůbec si nedovedu představit jak začít psát kód :/...Chvíli jsem hledal a našel jsem načtení souboru přes FileInputStream ale poté se celý soubor ukládá do celočíselné proměnné a nevím jak to udělat aby to bylo do stringu, teda pokud je možné ho takto načítat.
#6Evrokorps
Tato metoda ti načte soubor (cesta k souboru se předává parametrem) a vrátí ti obsah jako String :) kdybys chtěl nějak přesněji vysvětlit co co v metodě dělá tak řekni ale myslím že to je lehké na pochopení :)
Jinak doporučuji prostudovat a hlavně POUŽÍVAT!! dokumentaci:
#6Evrokorps
Navíc by bylo asi dobré vymazat všechny čárky a tečky v souboru aby, když budeš počítat délku slova, se počítala jen délka slova a ne o 1 znak navíc... takže konec metody upravit třeba takhle:
// vymaže všechny tečky a čárky ve Stringu
return sb.toString().replaceAll("\\.", "").replaceAll(",", "");
hele resim neco podobnyho. Teda pristi semestr budu resit.
A tak mi napadlo. Ze mi pole asi nebude stacit. Budu analyzovat pro zacatek tak 10 MB soubor ... 10 milionu slov. Sice nevim (ani priblizne) jak casto se v cestine slova opakuji. Tak myslim, ze bude treba nejaka jina datova struktura.
Co navrhujete?
Tabulku nebo nejakej strom. Pokud mozno neco osvedcenyho. Nebo neco co je k statisticke analyze primo stvoreno :D
Jsem zacatecnik! Takze databaze bych asi nedal. Nevim ani jestli v Jave sou :D Ale asi jo :D Nebo dal?
Chtelo by to neco uviverzalniho, treba to pak budu prepisovat do Ccka :D
#10Honza
co takhle použít Set? :) Vytvořit si třídu pro slovo, kde budeš mít velikost, počet výskytu atd... Pak všechny slova hodit do té množiny (klíč, hodnota) kde klíč bude to slovo jako String a hodnota bude instance třídy pro to slovo... v množině musí být unikátní klíče, takže stejné slovo v ní nebudeš mít 2x a při načítání budeš kontrolovat, zda dané slovo už v množině je. Pokud ano, přičteš k dané instanci toho slova k počtu výskytu 1, pokud ne přidáš to slovo do množiny... Pak budeš mít množinu se všemi slovy kde budeš mít jistotu, že dané slovo není v množině 2x a každého slova budeš mít potřebné informace... :D Nic těžkého v tom nehledej :)