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

  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • EmperorTigerstar

    EmperorTiger

    14 EYLÜL 2009
  • RD

    RD

    19 NİSAN 2006