ホームページ >Java >&#&チュートリアル >Java 8 の String.split() が空の区切り文字を以前のバージョンとは異なる方法で処理するのはなぜですか?
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 バージョン間で一貫した動作を確保するには、正規表現を次のように変更します。
Java 7 の動作に従う (下位互換性)
Java 7 以前との下位互換性のための一般的な解決策はありません。分割のカスタム実装が必要になる場合があります。
以上がJava 8 の String.split() が空の区切り文字を以前のバージョンとは異なる方法で処理するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。