Kaedah Java split() , apabila digunakan untuk membahagikan rentetan dengan paip simbol ("|"), boleh menghasilkan hasil yang tidak dijangka, seperti yang dilihat dalam yang berikut contoh:
public static void main(String[] args) { String test = "A|B|C||D"; String[] result = test.split("|"); for (String s : result) { System.out.println(">"+s+"<"); } }
Daripada output yang dimaksudkan:
>A< >B< >C< >< >D<
kod menghasilkan:
>< >A< >| >B< >| >C< >| >| >D<
Mengapa ini berlaku?
Masalahnya terletak pada sintaks kaedah split(). Simbol paip, "|", mempunyai kepentingan istimewa dalam ungkapan biasa, di mana ia mewakili pengendali "ATAU". Untuk menggunakan simbol paip secara literal sebagai pembatas, ia mesti dilepaskan menggunakan garis miring ke belakang ().
Untuk meminda kod, seseorang boleh menggunakan pendekatan berikut:
// Option 1: Escaping the pipe symbol String[] result = test.split("\|");
// Option 2: Utilizing Pattern.quote() import java.util.regex.Pattern; String[] result = test.split(Pattern.quote("|"));
Dengan melepaskan simbol paip, anda menekan status istimewanya dalam ungkapan biasa, membolehkan ia ditafsirkan sebagai pembatas literal.
Atas ialah kandungan terperinci Mengapa Kaedah `split()` Java Gagal Apabila Memisahkan Rentetan dengan '|' dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!