Lelaran melalui Titik Kod Unikod dalam Rentetan Java
String#codePointAt() menyediakan cara yang cekap untuk mendapatkan semula titik kod Unikod pada offset aksara tertentu . Walau bagaimanapun, pembangun mungkin menghadapi cabaran apabila cuba mengulangi titik kod secara berurutan.
Satu pendekatan yang berpotensi melibatkan penggunaan String#charAt() untuk mendapatkan semula aksara dan kemudian menyemak sama ada ia berada dalam julat pengganti tinggi. Jika pengganti tinggi dikesan, String#codePointAt() boleh digunakan untuk mendapatkan titik kod dan indeks boleh ditambah sebanyak 2. Untuk aksara di luar julat ini, nilai char boleh dianggap terus sebagai titik kod dan indeks boleh ditambah. oleh 1.
Walau bagaimanapun, pendekatan ini menimbulkan kebimbangan mengenai pengekodan aksara di luar Asas Berbilang Bahasa (BMP) menggunakan skim penggantian. Selain itu, ia mungkin dikenakan overhed pengiraan disebabkan oleh operasi capaian aksara yang berulang.
Untuk senario yang melibatkan aksara di luar BMP, Java menggunakan pengekodan UTF-16 (UTF-16-esque) yang Diubahsuai secara dalaman. Watak di luar BMP diwakili menggunakan urutan dua unit kod pengganti. Untuk mengulangi titik kod dengan cekap dalam kes sedemikian, pembangun boleh menggunakan pendekatan kanonik berikut:
final int length = s.length(); for (int offset = 0; offset < length; ) { final int codepoint = s.codePointAt(offset); // perform operations on the codepoint offset += Character.charCount(codepoint); }
Pendekatan ini berulang ke titik kod secara berurutan, mengendalikan aksara dalam BMP dan yang dikodkan menggunakan skim tumpangan dengan berkesan. Dengan menggunakan codePointAt() dan charCount(), ia mengoptimumkan proses untuk traversal titik kod yang cekap dalam Java Strings.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Berulang Melalui Titik Kod Unicode dalam Rentetan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!