Stringで今日やったミス

以前にも同じミスをしたことあるので戒めも込めて投稿。

for(String animal : Arrays.asList("fox dog wolf horse sheep deer cat nyaa".split("\\s")))
    System.out.println(animal);


・・・と書いていて、リストが長くなってきたので、Eclipseでリストの途中を改行してみた。

for(String animal : Arrays.asList("fox dog" +
       		" wolf horse sheep deer cat nyaa".split("\\s")))
    System.out.println(animal);

実行結果

fox dog[Ljava.lang.String;@1546e25

文字列の途中で改行加えただけで、結果が変わってしまった><

"fox dog" + " wolf horse sheep deer cat nyaa".split("\\s");

は、

"fox dog" + 文字列配列

を連結したことになってしまう。対処として、

("fox dog" + " wolf horse sheep deer cat nyaa").split("\\s");

のように括弧でくくればおk

修正後

for(String animal : Arrays.asList(("fox dog" +
   		" wolf horse sheep deer cat nyaa").split("\\s")))
    System.out.println(animal);

実行結果

fox
dog
wolf
horse
sheep
deer
cat
nyaa

他のStringメソッドでも同様の注意をしないといけない

String hoge = "ふぉくすけのしっぽかわいいよ".substring(6);
System.out.println(hoge);  // しっぽかわいいよ
String hoge = "ふ" +
        "ぉくすけのしっぽかわいいよ".substring(6);
System.out.println(hoge);  // ふっぽかわいいよ

まとめ

見やすさのために文字列改行することよくあるけど、
改行するとどの文字列に対してメソッドが実行されるのかを間違えやすいので要注意。