Java 8およびJava 7でのString.splitメソッドの非互換性

これは、プロジェクトをJava 7からJava 8に変換するプロセスで遭遇した問題についてのメモです。約6か月前に起こりましたが、突然そのことを思い出したので(問題)、すぐに書くことにしました。



だから、すぐに。



コードを実行した結果は次のとおりです。

package test; import java.util.Arrays; public class Main { public static void main(String[] args) { System.out.println("result: " + Arrays.toString("0000".split(""))); } }
      
      





Java 8の場合:

 result: [0, 0, 0, 0]
      
      





およびJava 7:

 result: [, 0, 0, 0, 0]
      
      







ご覧のとおり、文字列はさまざまな方法で分割されますが、この問題のためにArrayIndexOutOfBoundsExceptionをキャッチしました。

それは不快でしたが、私は生き残ることができ、すべての意志を拳に集め、問題が何であるかを理解することにしました。

公式ドキュメントには次のように書かれています。

この文字列の先頭に正の幅の一致がある場合、結果の配列の先頭に空の先行部分文字列が含まれます。 ただし、先頭の幅がゼロの一致では、このような空の先行部分文字列は生成されません。


つまり 文字列が空の文字で分割される状況では、空のゼロ要素は生成されません。

この動作は以前の動作よりも論理的ですが、互換性の障害は私にとって驚きでした。 いずれにせよ、何もできないので、注意してできるだけ少ない問題をキャッチしてください:)。



PS後で、stackoverflow.com この問題に関する議論を見つけました。

PPS Borzユーザーが正しく指摘したように、それはバグでした。 どうやら、より良い変更ログを読む必要があるようです。



All Articles