首頁 > Java > java教程 > 主體

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

Barbara Streisand
發布: 2024-10-24 18:19:03
原創
923 人瀏覽過

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板