首頁 > Java > java教程 > 為什麼 Java 8 的 `String.split()` 有時會省略前導空字串?

為什麼 Java 8 的 `String.split()` 有時會省略前導空字串?

DDD
發布: 2024-12-12 20:33:18
原創
744 人瀏覽過

Why Does Java 8's `String.split()` Sometimes Omit Leading Empty Strings?

為什麼 Java 8 中的 Split 有時會刪除結果陣列開頭的空字串?

簡介:

行為String.split() 在Java 8 中發生了顯著變化,結果數組開頭的空字串現在以不同方式處理比早期版本。如果不正確理解,此變更可能會導致意外結果。

Java 7 及之前版本:

在8 之前的Java 版本中,String.split() 將包含一個如果輸入字串的開頭存在正寬度匹配,則結果數組的開頭為空字串。但是,不包括開頭的零寬度匹配。

Java 8 及更高版本:

在 Java 8 中,在分割邏輯中加入了一個附加條件。現在,對於輸入字串開頭的零寬度匹配,空的前導子字串包含在結果數組中。此變更旨在提高一致性並防止出現空字串。

說明:

在以下範例中,我們將字串「abc」分割為空白字串Java 7 和8:

  • Java 7: tokens1 將是["", "a", "b", "c"] 因為分割機制會在開頭加上一個空格。
  • Java 8: tokens2 將是["a", "b", "c"] 因為開頭的零寬度匹配是

保持相容性:

如果您需要保持與Java 7 和Java 8的相容性,可以遵循以下準則:

  • Java 8 和上圖:

    • 將(?!A) 加入正規表示式的結尾,並將其包裝在非捕獲組(?:...) 中(如果它可以匹配零-)長度字串。
  • Java 7 和先前:

    • 沒有通用的解決方案來確保向後相容性。考慮使用 split() 的自訂實作。

其他要點:

  • 此行為變更僅影響零 - width 符合輸入字串的開頭。
  • 它適用於String.split() 和Pattern.split().
  • 如果在split() 中將limit 參數指定為零,則所有尾隨空字串都將被刪除,無論它們是前導還是尾隨。

以上是為什麼 Java 8 的 `String.split()` 有時會省略前導空字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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