Gyakori feladat, hogy számokat tartalmazó szövegeket kell rendeznünk természetes módon, amely azt eredményezi, hogy a szövegként tárolt számok rendezése nem lesz megfelelő: az ["1","3","21"] számok szövegként való rendezése után ["1","21","3"] sorrendbe kerülnek. A szűkebb Java nem ad erre eszközt és sajnos tágabb körben is probléma marad ez a probléma: nincs erre megoldás még a népszerű Jakarta Commons gyűjteményben sem. Ezt a problémát járta körül az In My Opinion blog írója is, s az alábbi megoldásokat találta:
- Natural String Order Stephen Friedrich blogján, ahol az implementált algoritmus teljes körű megoldást ad különféle rendezési szempontokra és nemzetközi karakterekre is.
- HumaneStringComparator, Tim Fennell implementációja.
- Pierre-Luc Paour programja.
- Natural Order String Comparison, amely C nyelvű implementáció.
- Natural Order Numerical Sorting, amely cikk bő lére eresztve foglalkozik a problémával, sok linket tartalmaz egyéb projektekre, de a linkek jó része vagy halott vagy nem Java megoldásra mutat.
Az oldalon készítettek egy tesztkörnyezetet, amelyben kipróbálták a felsorolt implementációkat, s az alábbi eredményeket kapták:
Pierre-Luc Paour | NaturalOrderComparator | 453ms | Eléggé gyors |
Stephen Friedrich | NaturalComparator | 4828ms | Locale szerint rendez, de lassú |
Stephen Friedrich | NaturalComparatorAscii | 360ms | A leggyorsabb, de csak ASCII |
Stephen Friedrich | NaturalComparatorIgnoreCaseAscii | 500ms | Eléggé gyors, de case-insensitive, de csak ASCII |
Tim Fennell | HumaneStringComparator | 4797ms | Oktatásra kiváló |
Natív Java | String.compareTo() | 235ms | - |