SORU
6 EKİM 2009, Salı


Nasıl bir Java Dize unicode codepoints yineleme miyim?

String#codePointAt(int), biliyorum ama codepoint ofset tarafından char ofset tarafından dizine değil.

Bir şey gibi çalıştığını düşünüyorum:

  • String#charAt(int) dizin char kullanarak
  • char test high-surrogates range.
    • eğer öyleyse, String#codePointAt(int) codepoint ve 2 Endeksi artış kullanın
    • yoksa, codepoint char belirli bir değeri kullanın ve 1 indeksi artış

Ama benim endişelerim

  • Doğal olarak yüksek Suretler aralığında olan codepoints char iki değer ya da bir saklı olacak mı emin değilim
  • bu karakterler arasında yineleme gibi korkunç pahalı bir yol gibi görünüyor
  • birisi bir şey daha geldi.

CEVAP
6 EKİM 2009, Salı


Evet, Java Dizeleri iç temsilleri için UTF-16-vari bir kodlama kullanır, ve, evet, BMP suret düzeni kullanarak dışında karakterleri kodlar.

Eğer BMP oustide karakterleri ile ilgili olacak biliyorsanız, o zaman burada bir Java Dize karakterler üzerinde yineleme için kurallı bir şekilde

final int length = s.length();
for (int offset = 0; offset < length; ) {
   final int codepoint = s.codePointAt(offset);

   // do something with the codepoint

   offset  = Character.charCount(codepoint);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • mobilenet.cz

    mobilenet.cz

    26 NİSAN 2008