首頁 >Java >java教程 >為什麼 Java 8 的 String.split() 處理空分隔符號的方式與先前的版本不同?

為什麼 Java 8 的 String.split() 處理空分隔符號的方式與先前的版本不同?

Patricia Arquette
Patricia Arquette原創
2024-12-12 20:26:16847瀏覽

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

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

在 Java 7 及更早版本中,使用空分隔符號 ("") 將產生一個同時包含前導和尾隨空字串的陣列。此行為在 Java 8 中發生了變化。

Java 8 行為

在 Java 8 中,空分隔符號上的分割不再在結果陣列中包含前導空字串。但是,它仍然會刪除尾隨的空字串。這是由於 String.split 和 Pattern.split 的實作發生了變化。

參考實作

比較Java 7 和Pattern.split 的參考實作Java 8,我們在Java 8 中發現以下新增:

此程式碼排除零長度符合位於結果陣列中輸入字串的開頭。

維護相容性

遵循 Java 8 行為(前向相容性)

為了確保跨 Java版本的行為一致,請將正規表示式修改為如下:

  1. 如果正規表示式可以匹配零長度字串,請在末尾加上(?!A) 並將原始正規表示式包裝在非捕獲組(?:...) 中。
  2. 如果正規表示式無法符合零長度字串,則無需修改。
  3. 如果不確定,請執行兩者修改。

遵循 Java 7 行為(向後相容性)

沒有與 Java 7 或更低版本向後相容的通用解決方案。可能需要拆分的自訂實作。

以上是為什麼 Java 8 的 String.split() 處理空分隔符號的方式與先前的版本不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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