0

タブとスペース、およびいくつかの任意の文字で構成される文字列があります。以下の文字列はで構成されていspace space tab tab 1 space tab -2 tab space + spaceます。

import java.util.Arrays;

String[] s = "          1   -2   + ".split("[\\s]+");
System.out.println(Arrays.toString(s));

正規表現を使用してsplitを実行[\s+]すると、取得することが期待されますが[1, -2, +]、マシン(OS X、JDK1.6.0_37)で返される配列はです[, 1, -2, +]

s[0].equals("")最初の要素は単に「空白」( returns )であることが判明したため、。trueと一致している必要があります\s

私は何が欠けていますか?

4

1 に答える 1

2

文字列を分割するときに、文字列の最初の文字が区切り文字の中にある場合、生成される配列の最初の要素は常にempty string.

このようにすると、文字列は常に . で始まりますempty string。したがって、区切り文字は、文字列 (先頭の空白に注意してください) を 2 つの部分に分割します。最初\s+は空の文字列で、その後ろはです。" a"\s+ ""a

したがって、得られた出力は明らかです。

最初の要素は単に「空白」 (s[0].equals("") は true を返す) であることが判明したため、\s と一致するはずでした。

いいえ、そうすべきではありませんでした。スペースは空の文字列ではありません。それらの間には違いがあります。

于 2013-01-30T23:26:00.580 に答える