概要
String#split()
に空文字列 ""
を渡して、文字列を 1 文字毎ごとの部分文字列に分解、みたいな手抜き実装をよくやるのですが、Java 7 (以前?) と Java 8 でこの挙動が異なるみたいです。
Java 7 では、以下のサンプルにあるとおり、戻り値の配列の一番最初の要素が空文字列になるのですが、Java 8 ではこの空文字列がなくなるようです。
デモコード
import java.util.Arrays;
import java.util.regex.Pattern;
public class StringSplit {
public static void main(String[] args) {
String str = "ABC";
// String#split() を試してみる
String[] elems = str.split("");
System.out.println(Arrays.toString(elems));
// 結果は
// Java 7 -> [, A, B, C]
// Java 8 -> [A, B, C]
// となる。
// Pattern#split() も同様の振る舞いとなる
Pattern delimiter = Pattern.compile("");
elems = delimiter.split(str);
System.out.println(Arrays.toString(elems));
}
}
参考
ideone.com は Java 7 ぽい。 Ruby の場合 だと空文字列はないので、Java 7 までがバグっぽい動き、だと思えばいいのかな…