これは、プロジェクトを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ユーザーが正しく指摘したように、それは
バグでした。 どうやら、より良い変更ログを読む必要があるようです。