
Bu sorunu çözmek için (elbette Türkçe için değil sadece, İspanyolca'daki ñ harfi ile ilgili de problemler çıkabiliyor) Collator adı verilen bir sınıftan yararlanılıyor. Bu sınıf yardımıyla sıralamalar istenen bir yerele göre rahatça yapılabiliyor. Örnek bir sınıf kodunu aşağıda bulabilirsiniz ve deneyebilirsiniz. Konunun ayrıntılı açıklamasını aşağıda verdiğim kaynak bağlantısıyla inceleyebilirsiniz. Kaynak kodu çalıştırdığınız zaman normal sıralamada Türkçe karakterlerin sona gittiğini ama Collator kullanınca uygun Locale ile doğru yerlerde bulunduğunu görebilirsiniz.
import java.awt.EventQueue;
import java.text.Collator;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
public class StringKarsilastirma {
  public static void main(final String args[]) {
    final Runnable runner = new Runnable() {
      public void run() {
        // Siralamada kullanilacak kelimeler
        final String words[] = { "İl", "üç", "üşüme", "şiir", "İki",
            "Çeşme", "Gök", "Araba" };
        // Dizimizi List haline getiriyoruz
        final List list = Arrays.asList(words);
        // Goruntuleme icin kullanacagimiz pencereyi yaratiyoruz
        final JFrame frame = new JFrame("Sıralama");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Box box = Box.createVerticalBox();
        frame.setContentPane(box);
        // En ustte kelimeleri normal halleriyle gosterelim
        JLabel label = new JLabel("Kelimeler:");
        box.add(label);
        JTextArea textArea = new JTextArea(list.toString());
        box.add(textArea);
        // Collections sınıfındaki standart siralama metodunu cagiralim
        Collections.sort(list);
        label = new JLabel("Sıralı:");
        box.add(label);
        textArea = new JTextArea(list.toString());
        box.add(textArea);
        // Turkce collator yaratalim
        final Collator trCollator = Collator.getInstance(new Locale(
            "tr"));
        // Bu collatoru kullanarak siralama yapalim
        Collections.sort(list, trCollator);
        label = new JLabel("Türkçe:");
        box.add(label);
        textArea = new JTextArea(list.toString());
        box.add(textArea);
        frame.setSize(400, 200);
        frame.setVisible(true);
      }
    };
    EventQueue.invokeLater(runner);
  }
}
Kaynak: Sorting Strings
 
1 yorum:
Çok faydalı bir kaynak, teşekkürler : )
Yorum Gönder