ホームページ >Java >&#&チュートリアル >Java 8 で `String.split()` の動作が変更されたのはなぜですか? 互換性を維持するにはどうすればよいですか?

Java 8 で `String.split()` の動作が変更されたのはなぜですか? 互換性を維持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 02:29:13587ブラウズ

Why Did Java 8 Change the Behavior of `String.split()`, and How Can I Maintain Compatibility?

Java 8 の分割の不一致を明らかにする

背景:
Java 8 より前では、文字列。 Split メソッドでは、結果配列の先頭と末尾に空の文字列が常に含まれます。ただし、この動作は Java 8 で変更されました。この記事では、この変更の背後にある理由を詳しく調べ、Java バージョン間の互換性を維持するための戦略を提供します。

Java 8 のパターン シフト:
Java 8 では、String.split と Pattern.split の両方のドキュメントに微調整が導入されました。新しい句が追加され、入力シーケンスの先頭に正の幅の一致がある場合にのみ、先頭の空の部分文字列が結果配列に含まれることを示しました。一方、入力の先頭でゼロ幅が一致すると、先頭の空の部分文字列は生成されません。

コードの比較:
パターンのリファレンス実装コードの比較Java 7 および Java 8 の .split は、Java 8 での条件付きステートメントの導入を示しています。このステートメントは、入力シーケンスの先頭の一致の幅がゼロかどうかをチェックし、そうであれば、

// Code added in 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;
}

互換性の維持:
Java バージョン間の一貫性を維持し、Java 8 の動作を維持するには、ユーザーは次の手順に従うことができます:

  • 正規表現が長さ 0 の文字列と一致する場合は、非キャプチャ丸括弧で囲んで追加します(?!A) を最後まで押します。
  • 正規表現が長さ 0 の文字列と一致できない場合、アクションは必要ありません。
  • 正規表現が長さ 0 の文字列と一致できるかどうかが不明な場合

これらのガイドラインに従うことで、開発者は String.split の動作が Java 全体で一貫性があり、予測可能であることを保証できます。バージョン。

以上がJava 8 で `String.split()` の動作が変更されたのはなぜですか? 互換性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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