プロが教える店舗&オフィスのセキュリティ対策術

以下のコードについて質問させてください。

=========================
class Test {
public static void main(String[] args) {
String data = "This is a pen.";
String[] ary = data.split("\\S");
System.out.print(ary.length);
}
}
=========================

このコードでは、ary.lengthが8になります。

splitでは非空白文字で分割されるはずですので、
T,h,i,s,_i,s,_a,_p,e,n,. の10文字だと思うのですが、なぜ8文字になるのでしょうか?
(アンダースコアは空白です)

A 回答 (1件)

区切り文字は残りません。

非空白をカンマに置き換えて、
",,,,_,,_,_,,,," (_は空白)
を カンマで splitした場合と同じと考えてください。

split("\\S",-1) にすると、区切り文字11個より1つ多い合計12個が分割結果となります。
空文字列4つ、空白、空文字列、空白、空白、空文字列4つ が結果です。

splitの第二引数を省略すると分割後に末尾の空文字列は落ちるので、
空文字列4つ、空白、空文字列、空白、空白の合計8つです。
    • good
    • 1
この回答へのお礼

なるほど
分割後、末尾の空文字列は落ちるんですね。
合点がいきました。ありがとうございました

お礼日時:2015/09/13 15:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!