Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memisahkan Rentetan dengan Pembatas yang Dipelihara Menggunakan Java Lookahead dan Lookahead?

Bagaimana untuk Memisahkan Rentetan dengan Pembatas yang Dipelihara Menggunakan Java Lookahead dan Lookahead?

Barbara Streisand
Barbara Streisandasal
2024-10-24 14:41:31370semak imbas

How to Split Strings with Delimiters Preserved Using Java Lookahead and Lookbehind?

Memisahkan Rentetan dengan Pembatas Dipelihara

Apabila bekerja dengan rentetan berbilang baris yang dihadkan oleh satu set pembatas unik, sukar untuk memisahkan rentetan sementara juga memelihara pembatas itu sendiri. Kaedah String.split standard hanya mengasingkan rentetan berdasarkan pembatas yang ditentukan, membuang aksara pembatas.

Menggunakan Lookahead dan Look Behind

Java Development Kit (JDK) menyediakan penyelesaian menggunakan pandangan ke hadapan dan ke belakang, yang merupakan ciri ungkapan biasa yang membolehkan anda memadankan dan menangkap aksara tanpa memasukkannya dalam hasil akhir.

Berikut ialah contoh menggunakan pandangan ke hadapan dan pandang belakang:

<code class="java">String input = "(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)";

String[] splitWithDelimiter = input.split("((?<=;)|(?=;))");
System.out.println(Arrays.toString(splitWithDelimiter));</code>

Corak:

  • (?<=;) sepadan dengan aksara kosong terus selepas koma bertitik (pandang ke belakang).
  • (?=;) sepadan dengan aksara kosong secara langsung sebelum koma bertitik (pandang ke hadapan).
  • ((?<=;)|(?=;)) digabungkan sepadan dengan aksara kosong sama ada selepas atau sebelum koma bertitik.

Output:

[Text1, ;, DelimiterA, ;, Text2, ;, DelimiterC, ;, Text3, ;, DelimiterB, ;, Text4]

Hasil ini mengekalkan pembatas bersama-sama teks, memenuhi keperluan untuk mengekalkan pembatas utuh sambil membelah rentetan.

Meningkatkan Kebolehbacaan

Ekspresi biasa kadangkala sukar dibaca dan difahami. Untuk meningkatkan kebolehbacaan, anda boleh mencipta pembolehubah dengan nama deskriptif yang mewakili corak ungkapan biasa. Contohnya:

<code class="java">static final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

public void someMethod() {
    final String[] splitResults = input.split(String.format(WITH_DELIMITER, ";"));
}</code>

Dengan menggunakan ruang letak dan String.format Java, anda boleh menjadikan ungkapan biasa lebih intuitif dan lebih mudah untuk ditafsirkan.

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Rentetan dengan Pembatas yang Dipelihara Menggunakan Java Lookahead dan Lookahead?. 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