Rumah >Java >javaTutorial >Mengapakah String.split() Java 8 Mengendalikan Pembatas Kosong Berbeza Daripada Versi Sebelumnya?

Mengapakah String.split() Java 8 Mengendalikan Pembatas Kosong Berbeza Daripada Versi Sebelumnya?

Patricia Arquette
Patricia Arquetteasal
2024-12-12 20:26:16847semak imbas

Why Does Java 8's String.split() Handle Empty Delimiters Differently Than Previous Versions?

Mengapa di Java 8 Split Kadangkala Mengalih Keluar Rentetan Kosong pada Permulaan Susunan Hasil?

Dalam Java 7 dan sebelumnya, membelah rentetan menggunakan pembatas kosong ("") akan menghasilkan tatasusunan yang mengandungi rentetan kosong di hadapan dan di belakang. Tingkah laku ini berubah dalam Java 8.

Gelagat Java 8

Dalam Java 8, belah pada pembatas kosong tidak lagi menyertakan rentetan kosong terkemuka dalam tatasusunan hasil. Walau bagaimanapun, ia masih mengalih keluar rentetan kosong yang tertinggal. Ini disebabkan oleh perubahan dalam pelaksanaan String.split dan Pattern.split.

Pelaksanaan Rujukan

Membandingkan pelaksanaan rujukan Pattern.split dalam Java 7 dan Java 8, kami dapati penambahan berikut dalam Java 8:

if (index == 0 && index == m.start() && m.start() == m.end()) {
    // no empty leading substring included for zero-width match
    // at the beginning of the input char sequence.
    continue;
}

Kod ini tidak termasuk padanan panjang sifar pada permulaan rentetan input daripada tatasusunan hasil.

Mengekalkan Keserasian

Mengikuti Kelakuan Java 8 (Keserasian Ke Hadapan)

Untuk memastikan tingkah laku yang konsisten merentas versi Java, ubah suai ungkapan biasa anda sebagai berikut:

  1. Jika regex boleh memadankan rentetan sifar panjang, tambahkan (?!A) pada penghujung dan balut regex asal dalam kumpulan bukan tangkap (?:...).
  2. Jika regex tidak dapat memadankan rentetan panjang sifar, tiada pengubahsuaian diperlukan.
  3. Jika tidak pasti, lakukan kedua-duanya pengubahsuaian.

Mengikuti Kelakuan Java 7 (Keserasian Ke Belakang)

Tiada penyelesaian umum untuk keserasian ke belakang dengan Java 7 atau sebelumnya. Pelaksanaan tersuai bagi pemisahan mungkin diperlukan.

Atas ialah kandungan terperinci Mengapakah String.split() Java 8 Mengendalikan Pembatas Kosong Berbeza Daripada Versi Sebelumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn