質問: data.split("\\S"); System.out.print(ary.length); } } ``` 正規表現「\\S」が非空白文字を示しているというのは知っています。 (私の環境はmacなので「\\S」で想定の結果になりましたが、Windowsだと「¥¥S」と書いたほうがいいかもしれません。) ただ非空白文字が調べましたがよく理解できず、対象の文字列を**どこで分けるか、どのように分けるか**が理解できていません。 もし分かる方がいれば教えていただけると助かります。
回答: toutouさんのリンク先にある説明が一番しっくりきたので備忘録の為まとめます。 非空白文字と言われるとなじみがないためわかりづらい。 そこで非空白文字を全部カンマに、空文字をアンダースコアに置き換える。 ``` class Test { public static void main(String[] args) { String data = "This is a pen."; String data1 = ",,,,_,,_,_,,,,"; String[] ary1 = data1.split(","); // 第二引数なしは「末尾の空文字をカット」 System.out.println(ary1.length); // 8 -1 String[] ary2 = data1.split(",", -1); // 第二引数−1は「制限なし」 System.out.println(ary2.length); // 12 -2 } } ``` data1をカンマで区切ると以下のようになる。 (1)空文字 (2)空文字 (3)空文字 (4)空文字 (5)_ (6)空文字 (7)_ (8)_ (9)空文字 (10)空文字 (11)空文字 (12)空文字 12個に区切られる。(2の場合) しかしsplitメソッドの第二引数がなしの場合は、末尾の空文字がカットされるため (9)~(12)を数えず、 8個となる。(1の場合) つまり今回の問題の回答は8となる。