ホームページ >Java >&#&チュートリアル >Java 8 の「String.split()」は空の文字列を Java 7 とは異なる方法で処理しますか?

Java 8 の「String.split()」は空の文字列を Java 7 とは異なる方法で処理しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 02:17:13902ブラウズ

How Does Java 8's `String.split()` Handle Empty Strings Differently Than Java 7?

Java 8 の String.split() での空の文字列の削除

Java 8 では、String.split() の動作が以前のバージョンと比較して変更されました。 Java 7. 具体的には、結果の配列の先頭で空の文字列が処理される方法が変更されました。

Context

Java 8 より前では、区切り文字が空の文字列の場合、split() は先頭と末尾に空の文字列を含む配列を生成していました。これらの空の文字列は最終的に削除され、空ではない文字列だけが残りました。

Java 8 の変更

Java 8 では、メカニズムが変更されました。区切り文字が空の文字列の場合、split() は先頭の空の文字列を削除した配列を生成します。ただし、この削除は、入力文字列の先頭のゼロ幅一致にのみ適用されます。

説明

Java 8 の Pattern.split() のドキュメントでは、先頭の部分文字列が空であると明示的に記載されています。入力文字列の先頭に正の幅の一致がある場合にのみ含まれます。先頭の一致がゼロ幅の場合、先頭の空の部分文字列は含まれません。

リファレンス実装

Java 7 と 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;
}

Maintaining互換性

Java バージョン間で一貫した動作を確保し、Java 8 との互換性を確保するには、次の点を考慮してください。

  • 正規表現が長さ 0 の文字列と一致できる場合は、(?!A) を追加します。正規表現を非キャプチャ グループ (?:...) でラップしながら正規表現の末尾に追加します。
  • 正規表現が長さ 0 と一致できない場合
  • 正規表現の機能が不明な場合は、最初のシナリオの両方のアクションを適用します。

(?!A) は、一致が発生しないことを確認します。文字列の先頭で、先頭の長さがゼロの一致を効果的に除外します。

以上がJava 8 の「String.split()」は空の文字列を Java 7 とは異なる方法で処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。