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

Source: https://habr.com/ru/post/J241784/


All Articles