Mengekalkan Pembatas semasa Pemisahan Rentetan
Apabila bekerja dengan rentetan berbilang baris yang dipisahkan oleh satu set pembatas, tugas biasa ialah membahagikannya kepada bahagian individu. Biasanya, kaedah String.split digunakan untuk tujuan ini. Walau bagaimanapun, pendekatan ini mengetepikan pembatas daripada hasil.
Menggunakan Pandang Ke Depan dan Belakang
Untuk mengekalkan pembatas semasa pemisahan, konsep pandang ke hadapan dan pandang belakang dalam ungkapan biasa boleh digunakan.
Pertimbangkan kod berikut:
<code class="java">System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)"))); System.out.println(Arrays.toString("a;b;c;d".split("(?=;)"))); System.out.println(Arrays.toString("a;b;c;d".split("((?<=;)|(?=;))")));</code>
Kod ini menggunakan pandangan ke hadapan dan ke belakang untuk memeriksa rentetan. Khususnya, (?<=;) sepadan dengan rentetan kosong yang serta-merta mendahului koma bertitik (;) dan (?=;) sepadan dengan rentetan kosong yang serta-merta mengikuti koma bertitik.
Baris akhir, yang membelah pada ((?<=;)|(?=;)), dengan cekap memisahkan rentetan kepada kedua-dua teks dan komponen pembatas:
[a;, b;, c;, d] [a, ;b, ;c, ;d] [a, ;, b, ;, c, ;, d]
Dalam hasil yang diingini, baris ketiga menangkap keperluan yang tepat, di mana setiap segmen teks diikuti oleh pembatas yang sepadan.
Meningkatkan Kebolehbacaan dengan Pembolehubah
Untuk meningkatkan kebolehbacaan ungkapan biasa, pertimbangkan untuk mencipta pembolehubah yang mewakili fungsinya. Sebagai contoh, kod berikut menggunakan pembolehubah WITH_DELIMITER untuk menentukan pembatas:
<code class="java">static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))"; public void someMethod() { final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";")); ... }</code>
Teknik ini membantu menjelaskan maksud ungkapan biasa.
Atas ialah kandungan terperinci Bolehkah Pembatas dikekalkan semasa Pemisahan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!