複数行の出力
このレッスンで分かること
- エスケープシーケンス
\nは改行 1 文字、\tはタブ 1 文字を表します"こんにちは!\nJava\n今日もがんばろう!"のように 1 本のStringに複数行を詰めます- 最小例は
return "こんにちは!\nJava を学んでいます。\n今日もがんばろう!";
複数行の出力 とは
エスケープシーケンス
\nを使って 1 つの文字列で複数行を表現する方法を学びます。本レッスンでは、複数行の出力 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
1 つの文字列で複数行を返す
前回のレッスンでは Solution.helloWorld() を作って、"Hello, Java" という 1 行の文字列を返しました。今回はそれを一歩進めて、1 つの文字列に複数行を詰め込むことに挑戦します。完成イメージは次の 3 行を順番に表示することです。
Java
こんにちは!
Java を学んでいます。
今日もがんばろう!見た目は 3 行ですが、メソッドが返すのは 1 本の String です。return を 3 回書くわけではありません。鍵になるのが エスケープシーケンス と呼ばれる特別な書き方です。
エスケープシーケンスは、バックスラッシュ
\と次の 1 文字を組み合わせて「ふつうの文字では表現しづらいもの」を表す仕組みです。JavaだけでなくPythonでもJavaScriptでも、ほぼ同じ記号が使われます。
エスケープシーケンスとは
文字列リテラル "..." の中に、改行やタブをそのまま打ち込みたい場面は山ほどあります。しかし、コードの中で Enter キーを押して改行すると Java は文法エラーにしてしまいます。そこで「改行を表す合言葉」として \n という 2 文字を書く、というルールが用意されています。
代表的なエスケープシーケンスは次のとおりです。
| 記法 | 意味 | 用途 |
|---|---|---|
\n | 改行 (line feed) | 行を分ける |
\t | タブ (水平タブ) | 列を揃える |
\" | ダブルクォート 1 文字 | 文字列内に " を入れる |
\\ | バックスラッシュ 1 文字 | パス C:\\Users など |
\r | キャリッジリターン | Windows 改行の併用 (\r\n) |
\' | シングルクォート 1 文字 | char リテラル内 |
図にすると、コンパイラがそれぞれの 2 文字を「特別な 1 文字」へ読み替えていることがよく分かります。
見た目は 2 文字でも、実行時にはそれぞれ 1 文字分 の特殊な文字として扱われます。\n のコードは Java の内部では で、純粋な改行文字 1 つです。
ふだんあまり意識しませんが、
printlnが行を区切ってくれるのも、内部で\n系の文字を末尾に足してくれているからです。今回は逆に、自分で\nを埋め込んでreturnする側にまわります。
\n を入れた Before / After
まずは改行なしで 3 つの文を + で繋いだ場合 (Before) を見てみます。
Java
public class Solution {
public static String printGreeting() {
return "こんにちは!" + "Java を学んでいます。" + "今日もがんばろう!";
}
}この戻り値を表示するとこうなります。
プレーンテキスト
こんにちは!Java を学んでいます。今日もがんばろう!3 つの文がべったり横に並んでしまいました。読みづらいですね。ここで \n を挟むと、見違えるように整います (After)。
Java
public class Solution {
public static String printGreeting() {
return "こんにちは!\nJava を学んでいます。\n今日もがんばろう!";
}
}実行結果は次のとおりです。
プレーンテキスト
こんにちは!
Java を学んでいます。
今日もがんばろう!\n を挟んだだけで、String の見た目が「3 行」になりました。ソースコード上は 1 行ですが、文字列の中身としては改行を含んだ 3 行ぶんになっている、というのが大事なポイントです。
\t でインデントを揃える
\n の仲間で覚えておくと便利なのが \t です。これを使うと、表のように列を揃えた出力を作れます。
Java
return "名前\t年齢\n太郎\t20\n花子\t22";表示するとこうなります。
プレーンテキスト
名前 年齢
太郎 20
花子 22半角スペースを並べて揃えるよりも、\t を 1 つ書くほうがずっと短く済みます。
\" と \\ で記号そのものを書く
String リテラルはダブルクォートで囲むので、文字列の途中にダブルクォートをそのまま書くと文字列の終わりだと誤解されてしまいます。そこで \" と書くと、エスケープされて「ダブルクォート 1 文字」になります。
Java
return "彼は \"Hello\" と言った。";これは 彼は "Hello" と言った。 という 1 つの文字列です。同じ発想で、バックスラッシュ自体を文字として書きたいときは \\ と 2 つ重ねます。Windows のパス C:\\Users\\Taro を Java の String に書くときによく使います。
1 つだけ書きたい記号を 2 つ書くというのは最初は違和感がありますが、「
\は次の文字とセットで意味を持つ合図なので、ただの記号として置きたい時にはもう一度書いて打ち消す」と覚えると腑に落ちます。
+ を使った別解
どうしても 1 行が長くなりすぎて読みにくい時は、文字列連結演算子 + を使って 1 行ずつ書く書き方もあります。これも printGreeting の解として正しいです。
Java
public class Solution {
public static String printGreeting() {
return "こんにちは!\n"
+ "Java を学んでいます。\n"
+ "今日もがんばろう!";
}
}こちらは 3 行に分けて書いたほうがレビュー時の差分が見やすい、というメリットがあります。ただし、それぞれの文字列の末尾に \n を付け忘れると改行されないので注意してください。最後の文だけは末尾に改行を入れなくて良いです (テストもそうなっています)。
よくある間違い
初心者がよく踏むワナを 3 つ紹介します。
\nを/nと書いてしまう。スラッシュの向きが逆だと、ただの 2 文字/nとして表示されます。\(バックスラッシュ) が正しい向きです。- 行末の
\nを忘れる。"こんにちは!" + "Java"のように\nを入れずに繋ぐと 1 行にくっついてしまいます。 - 文字列の途中で改行コードを直接書く。エディタで Enter キーを押して改行を入れると
Javaはコンパイルエラーにします。文字列の改行は必ず\nで表現します。
もう 1 つ、
+で連結するときに余計な空白を入れてしまうと、結合された文字列の途中に半角スペースが紛れ込みます。テストは「期待される文字列と完全一致」で判定するので、空白 1 つの差でfailになります。
ここまでの要点
\n は改行 1 文字、\t はタブ 1 文字、\" \\ はそれぞれ記号を 1 文字。1 本の String に複数行を詰めるときは \n を挟む、末尾の改行は付けない。
やってみよう
次の手順で printGreeting を完成させてください。
Solutionクラスに引数なしのprintGreetingメソッドを書く (戻り値の型はString)returnで 1 本の文字列を返す。3 つの文の間に\nを 2 つ挟む- 最後の
今日もがんばろう!の後ろには\nを付けない - 書けたら実行ボタンで動かして、テストが緑になることを確認する
もし + で連結する書き方のほうが見やすければそちらでも構いません。大事なのは「String 1 本に改行入りで 3 行ぶんの内容が入っていること」です。完成したら、次の章でいよいよ変数の登場です。
よくある質問
Q. Java と他言語の文法はどう違いますか?
A. Java は静的型付けで、変数宣言時に型を明示します(int x = 0;)。中括弧でブロックを表し、文末にセミコロンが必要です。Python の動的型付けや JavaScript の柔軟さに慣れていると最初は窮屈ですが、コンパイル時にバグが発見できる安全性がメリットです。
Q. コードが動かないときに最初に見るべき場所は?
A. コンパイルエラーは行番号とエラー種別(cannot find symbol、incompatible types など)が表示されます。実行時例外はスタックトレースの最初の at ... が原因行です。IDE(IntelliJ / VS Code)の警告も丁寧に潰すと、半分のバグは未然に防げます。
Q. Java の習得後に学ぶべき技術は何ですか?
A. 基本構文を抑えたら java-intermediate(コレクション / ジェネリクス / Stream / 例外)に進み、Spring Boot や Web 開発に展開するのが王道です。クラウド時代は Kotlin / Scala への展開も視野に入りますが、まずは Java 標準を固めるのが効率的です。
次のレッスン
次は 変数を使った自己紹介 で、エスケープシーケンス \n を使って 1 つの文字列で複数行を表現する方法を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 複数行出力 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 複数行出力 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- クラス名は Solution、メソッド名は printGreeting にする
- 戻り値の型は String、引数は無し
- 改行は \n を使って 1 本の文字列に 3 行ぶんを詰める
入出力例
test-cases.txt
printGreeting() → "こんにちは!
Java を学んでいます。
今日もがんばろう!"