Sort a String arrayTag(s): Internationalization Varia
Sort utilities are now part of latest JDK versions.
Case sensitive
java.util.Arrays.sort(myArray);
Case insensitive
java.util.Arrays.sort(myArray, String.CASE_INSENSITIVE_ORDER);
Sort with international characters.
Take the following example :
import java.util.*; import java.io.*; public class TestSort1 { static String [] words = { "Réal", "Real", "Raoul", "Rico" }; public static void main(String args[]) throws Exception { try { Writer w = getWriter(); w.write("Before :\n"); for (String s : words) { w.write(s + " "); } java.util.Arrays.sort(words); w.write("\nAfter :\n"); for (String s : words) { w.write(s + " "); } w.flush(); w.close(); } catch(Exception e){ e.printStackTrace(); } } // useful to output accentued characters to the console public static Writer getWriter() throws UnsupportedEncodingException { if (System.console() == null) { Writer w = new BufferedWriter (new OutputStreamWriter(System.out, "Cp850")); return w; } else { return System.console().writer(); } } }
Before : Réal Real Raoul Rico After : Raoul Real Rico Réal
To solve the problem , replace
java.util.Arrays.sort(words);
java.util.Arrays.sort(words, java.text.Collator.getInstance(java.util.Locale.FRENCH)); // or // java.util.Arrays.sort(words, java.text.Collator.getInstance());
Before : Réal Real Raoul Rico After : Raoul Real Réal Rico
import java.util.Locale; import java.text.Collator; ... Locale loc = Locale.FRENCH; sortArray(Collator.getInstance(loc), words); ... public static void sortArray(Collator collator, String[] strArray) { String tmp; if (strArray.length == 1) return; for (int i = 0; i < strArray.length; i++) { for (int j = i + 1; j < strArray.length; j++) { if( collator.compare(strArray[i], strArray[j] ) > 0 ) { tmp = strArray[i]; strArray[i] = strArray[j]; strArray[j] = tmp; } } } }