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

  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • JayzTwoCents

    JayzTwoCents

    26 AĞUSTOS 2012
  • Kanál používateľa McsFuego

    Kanál použ

    12 EKİM 2011