ホームページ > Java > &#&チュートリアル > Java 8 の「String.split()」で先頭の空の文字列が省略される場合があるのはなぜですか?

Java 8 の「String.split()」で先頭の空の文字列が省略される場合があるのはなぜですか?

DDD
リリース: 2024-12-12 20:33:18
オリジナル
743 人が閲覧しました

Why Does Java 8's `String.split()` Sometimes Omit Leading Empty Strings?

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

概要:

動作Java 8 では String.split() の内容が大幅に変更され、結果配列の先頭の空の文字列が次のようになりました。以前のバージョンとは処理が異なります。この変更は、正しく理解されていない場合、予期しない結果を招く可能性があります。

Java 7 以前:

Java 8 より前のバージョンでは、String.split() に入力文字列の先頭で正の幅の一致があった場合、結果配列の先頭に空の文字列が返されます。ただし、先頭のゼロ幅一致は含まれませんでした。

Java 8 以降:

Java 8 では、分割ロジックに追加の条件が追加されました。現在、空の先頭部分文字列は、入力文字列の先頭でのゼロ幅一致の結果配列に含まれません。この変更は、一貫性を向上させ、空の文字列アーティファクトを防ぐことを目的としています。

説明:

次の例では、文字列 "abc" を空の文字列に分割しています。 Java 7 および 8:

// Java 7
String[] tokens1 = "abc".split("");

// Java 8
String[] tokens2 = "abc".split("");
ログイン後にコピー
  • Java 7: 分割メカニズムにより先頭に空のスペースが追加されるため、トークン 1 は [""、"a"、"b"、"c"] になります。
  • Java 8: 先頭のゼロ幅の一致があるため、tokens2 は ["a", "b", "c"] になります。

互換性の維持:

Java 7 と Java 8 の両方との互換性を維持する必要がある場合は、次のガイドラインに従うことができます:

  • Java 8 および上:

    • 正規表現の末尾に (?!A) を追加し、ゼロと一致する場合は非キャプチャ グループ (?:...) で囲みます。長さの文字列。
  • Java 7 および前:

    • 下位互換性を確保するための一般的な解決策はありません。カスタム実装の使用を検討してください。 width は入力文字列の先頭で一致します。
    これは String.split() と の両方に適用できます。 Pattern.split().
split() で limit 引数を 0 に指定すると、先頭か末尾かに関係なく、後続の空の文字列がすべて削除されます。

以上がJava 8 の「String.split()」で先頭の空の文字列が省略される場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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