首頁  >  文章  >  Java  >  如何拆分字串並保留分隔符號?

如何拆分字串並保留分隔符號?

Barbara Streisand
Barbara Streisand原創
2024-10-24 18:19:03861瀏覽

How to Split Strings Preserving Delimiters?

在保留分隔符號的情況下拆分字串

使用多行字串時,通常需要使用分隔符號將它們拆開分為各個組成部分。但是, String.split() 的預設行為會丟棄分隔符,只留下被提取的文字。

問題:

考慮以下字串:

(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)

使用String.split() 分割此字串會產生:

    使用String.split() 分割此字串會產生:
  • 使用String.split() 分割此字串會產生:
  • 使用String.split() 分割此字串會產生:
  • Text1
Text2

Text3

Text4

Text4

預期的輸出:
<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>
要保留分隔符號並相應地分割字串,我們需要一種保留分隔符號的方法。

    解決方案:
  • JDK 提供了一種使用前向和後向正規表示式 (regex) 功能來實現此目的的方法。它的運作原理如下:
  • 這會產生以下輸出:

[a;, b;, c;, d]

[a , ;b, ;c, ;d]

[a, ;, b, ;, c, ;, d]
  • 最後的輸出與所需的格式對齊,其中每個分隔符號都被保留,字串被分成單獨的部分。
  • 正規表示式解釋:

(?(?=;):向前找出分號並在其後面選擇一個零寬度佔位符。 ((?
<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>
透過組合這些模式,我們可以在每個分隔符號處有效地分割字串同時保留分隔符號本身作為輸出的一部分。

可讀性增強:為了提高可讀性,請考慮使用命名正規表示式,如下所示: 這使得正則表達式更加不言自明並且更易於維護。

以上是如何拆分字串並保留分隔符號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn