Pythonだと、
',,,meow,,,'.split(',')
の実行結果は、
['', '', '', 'meow', '', '', '']
なんだけど、Javaだと
System.out.println(Arrays.toString(",,,meow,,,".split(",")));
は、
[, , , meow]
で、空文字列の要素が末尾まで続く場合は省略されてしまう。
なので、",,,,,,".split(",")
なんかは空の配列が戻ってくる。
Pythonと同じ仕様の結果が欲しい場合は、第2引数 limit
に負の数(なんでもいい)を与えればよいらしい。
何でそうなるのかと思ったら、デフォルト (limit == 0
) の時は、ご丁寧に末尾の空要素の分だけ要素数を減らしているようだ。
// Construct result
int resultSize = list.size();
if (limit == 0) {
while (resultSize > 0 && list.get(resultSize - 1).isEmpty()) {
resultSize--;
}
}
String[] result = new String[resultSize];
return list.subList(0, resultSize).toArray(result);
https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/String.java#L3157
Javaの方、変な仕様だなあと思ったけど、Perlも(負の数云々も含めて)ほぼ同じだった。すっかりPythonに染まっている(?)