ホームページ > Java > &#&チュートリアル > Java 8 の String.split() が空の区切り文字を以前のバージョンとは異なる方法で処理するのはなぜですか?

Java 8 の String.split() が空の区切り文字を以前のバージョンとは異なる方法で処理するのはなぜですか?

Patricia Arquette
リリース: 2024-12-12 20:26:16
オリジナル
857 人が閲覧しました

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

Java 8 の分割で結果配列の先頭にある空の文字列が削除されることがあるのはなぜですか?

Java 7 以前では、次を使用して文字列を分割していました。空の区切り文字 ("") を使用すると、先頭と末尾の両方の空の文字列が含まれる配列になります。この動作は Java 8 で変更されました。

Java 8 の動作

Java 8 では、空の区切り文字での分割に結果配列の先頭に空の文字列が含まれなくなりました。ただし、末尾の空の文字列は削除されます。これは、String.split と Pattern.split の実装の変更によるものです。

リファレンス実装

Java 7 と Java 7 の Pattern.split のリファレンス実装の比較Java 8 では、Java 8 に次の追加が見つかります:

if (index == 0 && index == m.start() && m.start() == m.end()) {
    // no empty leading substring included for zero-width match
    // at the beginning of the input char sequence.
    continue;
}
ログイン後にコピー

このコード入力文字列の先頭にある長さ 0 の一致を結果の配列から除外します。

互換性の維持

Java 8 の動作に従います (上位互換性)

Java バージョン間で一貫した動作を確保するには、正規表現を次のように変更します。

  1. 正規表現が長さ 0 の文字列と一致する場合は、最後に (?!A) を追加し、元の正規表現を非キャプチャ グループ (?:...) でラップします。
  2. 正規表現が長さ 0 の文字列と一致できない場合は、変更する必要はありません。
  3. 不明な場合は、両方を実行してください。

Java 7 の動作に従う (下位互換性)

Java 7 以前との下位互換性のための一般的な解決策はありません。分割のカスタム実装が必要になる場合があります。

以上がJava 8 の String.split() が空の区切り文字を以前のバージョンとは異なる方法で処理するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート