Cara termudah untuk masing-masing char
dalam String
adalah menggunakan toCharArray()
:
for (char ch: "xyz".toCharArray()) {
}
Ini memberi Anda keringkasan untuk setiap konstruk, tetapi sayangnya String
(yang tidak dapat diubah) harus melakukan salinan defensif untuk menghasilkan char[]
(yang bisa diubah), sehingga ada beberapa penalti biaya.
Dari dokumentasi :
[ toCharArray()
mengembalikan] array karakter yang baru dialokasikan yang panjangnya adalah panjang dari string ini dan yang isinya diinisialisasi untuk mengandung urutan karakter yang diwakili oleh string ini.
Ada lebih banyak cara verbose untuk mengulangi karakter dalam array (reguler untuk loop CharacterIterator
,, dll) tetapi jika Anda bersedia membayar biaya toCharArray()
untuk-masing-masing adalah yang paling singkat.
polygenelubricants
sumber
toCharArray( )
ini disebut 3 kali?211900000
, waktu yang dibutuhkan untuk menyelesaikanfor (char c : str.toCharArray()) { }
adalah ~ 250for (char c : charArray) { }
ms dan waktu yang dibutuhkan untuk menyelesaikan adalah <10 ms. Tentu saja, nilai waktu ini akan tergantung pada perangkat keras tetapi yang perlu diperhatikan adalah bahwa satu metode jauh lebih mahal daripada yang lain.toCharArray()
tidak ada di dalam loop body; itu hanya dipanggil sekali, dan kemudian loop berulang di atas array yang dihasilkan. (Untuk-setiap loop berbeda darifor
-loop umum , yang mengevaluasi stop-kondisi setiap iterasi.)sumber
Solusi lain yang bermanfaat, Anda dapat bekerja dengan string ini sebagai array dari String
sumber
split()
dipetakan ke lebih dari satu karakter Java, yang merupakan kasus untuk hampir semua emotikon. Misalnya, variasi contoh Anda ini akan berulang empat kali daripada tiga:for (String s : "x😁z".split("")) { System.out.println(s); }
Anda perlu mengubah objek String menjadi array char menggunakan metode
toCharArray
() dari kelas String:sumber
Di Java 8 kita bisa menyelesaikannya sebagai:
Method chars () mengembalikan sebuah
IntStream
seperti yang disebutkan dalam doc :Mengapa menggunakan
forEachOrdered
dan tidakforEach
?Perilaku
forEach
secara eksplisit nondeterministic di mana sebagaiforEachOrdered
melakukan tindakan untuk setiap elemen aliran ini, dalam urutan pertemuan aliran jika aliran memiliki urutan pertemuan yang ditentukan. JadiforEach
tidak menjamin bahwa pesanan akan disimpan. Periksa juga pertanyaan ini untuk lebih lanjut.Kita juga bisa menggunakan
codePoints()
untuk mencetak, lihat jawaban ini untuk lebih jelasnya.sumber
Sayangnya Java tidak membuat
String
implementasiIterable<Character>
. Ini bisa dengan mudah dilakukan. AdaStringCharacterIterator
tapi itu bahkan tidak menerapkanIterator
... Jadi buat sendiri:Sekarang Anda dapat (agak) dengan mudah menjalankan
for (char c : new CharSequenceCharacterIterable("xyz"))
...sumber
Jika Anda menggunakan Java 8, Anda dapat menggunakan
chars()
padaString
untuk mendapatkanStream
karakter, tetapi Anda harus melemparkanint
kembali kechar
sebagaichars()
mengembalikan sebuahIntStream
.Jika Anda menggunakan Java 8 dengan Eclipse Collections , Anda dapat menggunakan metode
CharAdapter
kelasforEach
dengan lambda atau metode referensi untuk beralih ke semua karakter dalam aString
.Contoh khusus ini juga bisa menggunakan referensi metode.
Catatan: Saya pengendara untuk Eclipse Collections.
sumber
Anda juga dapat menggunakan lambda dalam hal ini.
sumber
Untuk Travers an String Anda juga dapat menggunakan
charAt()
dengan string.Suka :
charAt()
adalah metode penanganan string di java yang membantu untuk melintasi string untuk karakter tertentu.sumber
for (char st: "xyz".toCharArray()) {}
itu