Forum » Programiranje » Java - sortiranje
Java - sortiranje
rrejc ::
Pozdravljeni,
za sortiranje v C# uporabljam naslednjo kodo:
in dobim naslednji izpis:
kar je OK. Besede so lepo sortirane po naši abecedi.
Če naredim isto v Javi:
pa dobim drugačen izpis:
torej besede, ki se začnejo na nj so na koncu (za vsemi ostalimi n-ji). Zakaj je to tako? Je potrebno še kaj nastaviti? Probaval sem različne možnosti z collator.setStrength in collator.setDecomposition ampak ni nič bolje. Kaj mi je storiti - napisati svoj collator?
Edit: verjetno bi šlo z RuleBasedCollator-jem. Čekiram...
Thanks,
Rok
za sortiranje v C# uporabljam naslednjo kodo:
var words = new List<string> { "novoknjižen", "njivica", "njegov", "njun", "numirati", "nezadovoljstvo", "nitka" }; var culture = new CultureInfo("sl-SI"); words.Sort((s1, s2) => String.Compare(s1, s2, false, culture)); foreach (string word in words) { Console.WriteLine(word); }
in dobim naslednji izpis:
nezadovoljstvo nitka njegov njivica njun novoknjižen numirati
kar je OK. Besede so lepo sortirane po naši abecedi.
Če naredim isto v Javi:
List<String> words = new ArrayList<String>(); words.add("novoknjižen"); words.add("njivica"); words.add("njegov"); words.add("njun"); words.add("numirati"); words.add("nezadovoljstvo"); words.add("nitka"); Locale locale = new Locale("sl", "SI"); Collator collator = Collator.getInstance(locale); Collections.sort(words,collator); for (String word : words) { System.out.println(word); }
pa dobim drugačen izpis:
nezadovoljstvo nitka novoknjižen numirati njegov njivica njun
torej besede, ki se začnejo na nj so na koncu (za vsemi ostalimi n-ji). Zakaj je to tako? Je potrebno še kaj nastaviti? Probaval sem različne možnosti z collator.setStrength in collator.setDecomposition ampak ni nič bolje. Kaj mi je storiti - napisati svoj collator?
Edit: verjetno bi šlo z RuleBasedCollator-jem. Čekiram...
Thanks,
Rok
- spremenilo: rrejc ()
rrejc ::
Ahh, smešno.
Namreč gledal sem v help kjer piše, da je parameter language dvočrkovna oznaka po ISO 639 (torej sl in ne sl_SI). Pol se pa pejd. Hvala arjan_t.
Namreč gledal sem v help kjer piše, da je parameter language dvočrkovna oznaka po ISO 639 (torej sl in ne sl_SI). Pol se pa pejd. Hvala arjan_t.
Zgodovina sprememb…
- spremenilo: rrejc ()
arjan_t ::
pa veš da ni, sl in SI posebaj že vredu
Lahko napišeš:
in bo delalo vredu
če nad oni prvim nardiš:
bo vrnilo pravilno vrednost (Slovenian)
Lahko napišeš:
Locale locale = new Locale("bla");
in bo delalo vredu
če nad oni prvim nardiš:
locale.getDisplayLanguage()
bo vrnilo pravilno vrednost (Slovenian)
rrejc ::
Hmm tegale zadnjega komentarja ne razumem... Anyway, tudi sl_SI (torej Locale locale = new Locale("sl_SI");) ne da pričakovanih rezultatov. Sedaj so vsi šumniki enakovrednim svoji "nešumniški" različici (kombinacija nj je pa v tem primeru OK). Torej koda:
Mogoče kakšen drug predlog kako naj dosežem to, da bodo šumniki urejeni pravilno (črka č je za c-jem, š za s-jem, ž za z-jem) in da bodo špilale tudi kombinacije nj, lj...
Thanks...
private static void testSorting() { List<String> words = new ArrayList<String>(); words.add("čaj"); words.add("cesta"); words.add("čikorja"); words.add("ciza"); words.add("cunja"); words.add("čičirika"); words.add("čežana"); words.add("copata"); words.add("cuker"); Locale locale = new Locale("sl_SI"); Collator collator = Collator.getInstance(locale); Collections.sort(words,collator); for (String word : words) { System.out.println(word); } }da izpis
čaj cesta čežana čičirika čikorja ciza copata cuker cunja
Mogoče kakšen drug predlog kako naj dosežem to, da bodo šumniki urejeni pravilno (črka č je za c-jem, š za s-jem, ž za z-jem) in da bodo špilale tudi kombinacije nj, lj...
Thanks...
jan_g ::
Meni pravilno deluje slovaški :P, slovenski pa ne. Ne vem, zakaj, ko sem to uporabljal že leta nazaj (še pri javi 1.4), je delalo ok. Morda so v naslednjih različicah kaj zasrali ... drugače pa lahko preprosto definiraš pravila z RuleBasedCollatorjem, če noben rezultat ni zadovoljiv.
List<String> words = new ArrayList<String>() {{ add("čaj"); add("cesta"); add("čikorja"); add("ciza"); add("cunja"); add("čičirika"); add("čežana"); add("copata"); add("cuker"); add("novoknjižen"); add("njivica"); add("njegov"); add("njun"); add("numirati"); add("nezadovoljstvo"); add("nitka"); }}; Collections.sort(words, Collator.getInstance(new Locale("sk"))); System.out.println(words);
jan_g ::
No, tudi to ne dela za šumnike, odpravi pa problem z 'nj'. Tako da, tvoja rešitev deluje na pol. Meni zaenkrat v 100% deluje samo preklop na slovaški Locale, je pa res, da se mi niti ne da s tem ukvarjati.
Zgodovina sprememb…
- spremenil: jan_g ()
rrejc ::
Spura, počasi, počasi. Znamo brat javadoc, ki pa kot že rečeno tudi ni sveta knjiga (kot očitno meniš ti). V javadocu namreč piše, da je language: The language argument is a valid ISO Language Code. These codes are the lower-case, two-letter codes as defined by ISO-639. You can find a full list of these codes at a number of sites, such as: http://www.loc.gov/standards/iso639-2/e....
In če bi prebral moje vprašanje bi videl, da sem imel nastavljen locale "sl" (kot ga sveta knjiga javadoc svetuje) in sem probaval z različnimi možnostmi setStrength() ampak nisem dobil zadovoljivega rezultata. Če nastavim local na "sl-SI" pa imam problem z šumniki kot je že pojasnil jan_g.
Jan_g, hvala, bodisi bom probal z slovaškim collatorjem, ali pa z RuleBasedCollatorjem (osnovno sortiranje sem že probal in deluje OK, sedaj moram preveriti še vse ostale posebnosti (posebne znake, naglase...)).
In če bi prebral moje vprašanje bi videl, da sem imel nastavljen locale "sl" (kot ga sveta knjiga javadoc svetuje) in sem probaval z različnimi možnostmi setStrength() ampak nisem dobil zadovoljivega rezultata. Če nastavim local na "sl-SI" pa imam problem z šumniki kot je že pojasnil jan_g.
Jan_g, hvala, bodisi bom probal z slovaškim collatorjem, ali pa z RuleBasedCollatorjem (osnovno sortiranje sem že probal in deluje OK, sedaj moram preveriti še vse ostale posebnosti (posebne znake, naglase...)).
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Sortiranje razredovOddelek: Programiranje | 1462 (1209) | Spura |
» | Sortiranje po večih atributih, javaOddelek: Programiranje | 1698 (1464) | marjan_h |
» | [JAVA] String problem!Oddelek: Programiranje | 1683 (1380) | Sergio |
» | Quick sort ascending/descendingOddelek: Programiranje | 2056 (1736) | infiniteLoop |
» | [JavaScript] Sortiranje šumnikovOddelek: Programiranje | 2161 (1895) | MarkookraM |