複数行の出力
文字列の途中で Enter を押すと、コンパイラが止まる
3 行に分かれた文章を返したい。素直に考えれば、文字列の途中で改行キーを押せばよさそうです。ところが Java は、文字列リテラルが行をまたぐことを許しません。
Java
String ng = "1 行目
2 行目"; // unclosed string literal で止まるかといって return を 3 回書くこともできません。return に到達した時点でメソッドは終わるので、2 行目以降は実行されないからです。返せるのは、あくまで 1 本の String です。
1 本の文字列に、3 行ぶんを詰める
そこで使うのが \n です。バックスラッシュと n の 2 文字で書きますが、実行時には改行 1 文字として扱われます。文字列の中に置いた場所で行が切り替わります。
まず \n を入れずに、3 つの文を + でつないだ場合を見てみます。
Java
public class Notice {
public static String body() {
return "本日は定休日です。" + "明日は 10 時に開きます。" + "またお越しください。";
}
}これを表示すると 本日は定休日です。明日は 10 時に開きます。またお越しください。 と、3 文がべったり横に並んだ 1 行になります。つなぎ目に \n を置くと、同じ 1 本の文字列が 3 行に見えるようになります。
Java
return "本日は定休日です。\n明日は 10 時に開きます。\nまたお越しください。";プレーンテキスト
本日は定休日です。
明日は 10 時に開きます。
またお越しください。ソースコードの上では 1 行のままです。行数を決めているのは見た目ではなく、文字列の中に \n が何個あるかだけ、というのがここでの要点です。3 行にしたいなら \n は 2 個で、最後の行の末尾には付けません。
\は「次の 1 文字とセットで特別な意味になる」という合図です。だから\そのものを文字として書きたいときは\\と 2 つ重ねて、合図を打ち消します。
/n と書くと、ただの 2 文字になる
いちばん多い失敗が、バックスラッシュの向きを間違えることです。/n はどこにでもあるただの 2 文字なので、改行にはならず、そのまま画面に /n と出ます。日本語キーボードで ¥ と表示されるキーが Java のバックスラッシュなので、それを使ってください。
1 行が長くなりすぎて読みにくいときは、+ で分けて書くこともできます。
Java
return "本日は定休日です。\n"
+ "明日は 10 時に開きます。\n"
+ "またお越しください。";この書き方は差分が読みやすい代わりに、各行の末尾に \n を付け忘れると静かにつながってしまいます。
やってみよう
printGreeting から、次の 3 行になる文字列を 1 本返してください。
こんにちは!Java を学んでいます。今日もがんばろう!
\n は 2 個、最後の行のうしろには入れません。テストは完全一致で比べるので、+ でつなぐ書き方を選んだ場合は、余計な半角スペースが紛れていないかを確かめてください。
要件
- クラス名は Solution、メソッド名は printGreeting にする
- 戻り値の型は String、引数は無し
- 改行は \n を使って 1 本の文字列に 3 行ぶんを詰める
入出力例
printGreeting() → "こんにちは!
Java を学んでいます。
今日もがんばろう!"