2014-12-09 16 views
15

Yazmakta olduğum bir Java programı için, dizeleri sözlüksel olarak Unicode kod noktası ile sıralamaya ihtiyacım var. Bu, Temel Çok Dilli Düzlem'in dışındaki değerlerle uğraşmaya başladığınızda ile aynı değil değil. String.compareTo(), dizeleri sözlüksel olarak 16 bit char değerleriyle karşılaştırır. Bunun eşdeğer olmadığını görmek için, U + FD00 ARABIC LIGATURE HAH, YEH İZOLELİ FORMU İLE, U + 1D11E MÜZİK SEMBOLÜ G CLEF'den daha azdır, ancak Arapça karakter için "\uFD00" nesnesinin nesnesinin "\uD834\uDD1E" vekil çiftinden daha büyük olduğunu görürsünüz. nota anahtarı.İki Java Strings'i sözlüksel olarak * Unicode kod noktaları * ile karşılaştırmanın tercih edilen yolu nedir?

using String.codePointAt() and Character.charCount() kod noktalarını elle geçebilir ve gerekirse karşılaştırmayı kendim yapabilirim. Bunu yapmak için bir API işlevi veya başka bir "kanonik" yolu var mı?

+0

nu desteklediğine bakın. Normalleştirmeye, yerele vb. –

+0

@JonSkeet Çözmeyi denediğim asıl sorun, bir dosya biçiminde ilginç bir durum olduğumdur. 1) bir Unicode karakterinin çalıştığı bir String'e gereksinim duyduğum yeri tasarlıyorum, 2) yerelden bağımsızdır ve 3) diğer programların çoğaltabilmesi için belirtilmesi kolaydır. Asıl sıralama biraz daha az alakalı. Unicode kod noktası sırasını, yukarıda belirtilen kısıtlamaları belirtmek için en kolay görünen gibi seçtim. Bu arada, giriş dizeleri aslında spesifikasyondaki diğer kurallar nedeniyle NFC'ye normalleştirilecektir. –

+0

Yazılacak diğer programlar hangi dillerdir? Eğer UTF-16'nın norm olduğu (ör. .NET'de bir şey) ise, o zaman UTF-16 kod ünitelerini sözcüksel olarak karşılaştırdığınızı kolayca söyleyebilirsiniz ... –

cevap

İlgili konular