Javaの文字列リテラルを、初心者向けにじっくり解説
最初は「文字をどう書くか」から。ここを理解すると、出力、入力、メッセージ表示、ログなどが一気に扱えるようになります。
文字列リテラルの基礎
- 定義: 文字列リテラルは、ダブルクォーテーションで囲んだ文字の並び。
- 例:
"Hello","こんにちは",""(空文字)
- 例:
- 型: 文字列は String型。変数に代入して使う。
- 1文字との違い:
'A'は char型(1文字)、"A"は String型(文字列)。
String msg = "こんにちは";
char c = 'A'; // 1文字はシングルクォート
System.out.println(msg); // こんにちは
Javaよく使う表示方法
- 基本の出力:
System.out.println(...)は改行つき、System.out.print(...)は改行なし。
System.out.println("Hello"); // Hello と表示して改行
System.out.print("Hi"); // Hi と表示して改行しない
System.out.println("!"); // ここで改行される → 結果: Hi!
Java文字列の結合(つなげる)
- 演算子:
+で文字列同士、文字列と数値を結合できる。 - 自動変換: 数値や真偽値も文字列に自動変換される。
String name = "山田";
int age = 20;
System.out.println("名前: " + name + ", 年齢: " + age); // 名前: 山田, 年齢: 20
Javaエスケープシーケンス(特殊文字)
- 必要性: そのまま書けない記号や制御文字を、バックスラッシュで表現。
- 代表例:
\"ダブルクォートそのもの\\バックスラッシュ\n改行\tタブ
System.out.println("彼は言った: \"Javaは楽しい\""); // " を含めたい
System.out.println("C:\\Program Files\\Java"); // \ を含めたい
System.out.println("1行目\n2行目"); // 改行
Java便利な書き方:テキストブロック(複数行文字列)
- 特徴: Java 15以降で使える
""" ... """。複数行の文字列を見やすく書ける。 - インデントも整えやすい。
String html = """
<html>
<body>
<h1>Hello</h1>
</body>
</html>
""";
System.out.println(html);
Javaよく使うメソッド
- 長さを知る:
length() - 中身の比較:
equals(...)(==ではない) - 部分取り出し:
substring(begin, end) - 含まれるか:
contains(...) - 置換:
replace(old, new)
String s = "Java Programming";
System.out.println(s.length()); // 16
System.out.println(s.equals("Java")); // false
System.out.println(s.substring(5, 16)); // "Programming"
System.out.println(s.contains("Pro")); // true
System.out.println(s.replace("Java", "Kotlin")); // Kotlin Programming
Javaよくあるつまずきポイントと回避策
- ” と ‘ の混同:
- 文字列は
"、1文字は'。間違うとコンパイルエラー。
- 文字列は
- == で文字列比較しない:
==は参照比較。中身の比較はequals(...)を使う。
- null の扱い:
- 変数が
nullのままlength()などを呼ぶと NullPointerException。 - 先に
s != nullを確認するか、初期化しておく。
- 変数が
String a = "abc";
String b = new String("abc");
System.out.println(a == b); // false の可能性あり(参照が違う)
System.out.println(a.equals(b)); // true(中身が同じ)
Java書式付き出力(きれいに整える)
- printf: 変数を決まった形で出力。
%s(文字列)、%d(整数)、%f(小数)など。
String name = "田中";
int score = 95;
double rate = 0.875;
System.out.printf("名前: %s, 点数: %d, 率: %.2f%n", name, score, rate);
// → 名前: 田中, 点数: 95, 率: 0.88
Java例題で練習
例題1:自己紹介文を作る
- 課題: 名前、年齢、趣味を変数に入れて、1行の自己紹介を出力。
public class Intro {
public static void main(String[] args) {
String name = "鈴木";
int age = 23;
String hobby = "読書";
String intro = "はじめまして、" + name + "です。年齢は" + age + "歳、趣味は" + hobby + "です。";
System.out.println(intro);
}
}
Java例題2:引用符を含むメッセージ
- 課題: 画面に 「彼は “Java” が好きと言った。」 をそのまま表示。
public class Quote {
public static void main(String[] args) {
System.out.println("彼は \"Java\" が好きと言った。");
}
}
Java例題3:複数行メニューを整える
- 課題: テキストブロックでメニューを表示。
public class Menu {
public static void main(String[] args) {
String menu = """
=== メニュー ===
1. 新規作成
2. 開く
3. 保存
0. 終了
""";
System.out.println(menu);
}
}
Java例題4:安全な比較(null考慮)
- 課題: 入力がない場合(null)のときに落ちない比較。
public class SafeEquals {
public static void main(String[] args) {
String target = "OK";
String input = null;
boolean match = "OK".equals(input); // 左側をリテラルにすると null でも安全
System.out.println(match); // false
}
}
Java例題5:部分一致でフィルタ
- 課題: リストから「Java」を含む要素だけ表示。
import java.util.List;
public class Filter {
public static void main(String[] args) {
List<String> items = List.of("Java入門", "Python基礎", "Java応用", "C言語");
for (String item : items) {
if (item.contains("Java")) {
System.out.println(item);
}
}
}
}
Javaミニチェック(理解度テスト)
- Q1:
"A"と'A'の違いは?- 答え:
"A"は String(文字列)、'A'は char(1文字)。
- 答え:
- Q2: 文字列の中身が同じかどうかを調べるには?
- 答え:
equals(...)を使う(==ではない)。
- 答え:
- Q3: 改行したいときに入れるものは?
- 答え:
\n(エスケープシーケンス)。
- 答え:
次のステップ(もっと使いこなす)
- 文字コード・Unicode: 絵文字や多言語文字の扱い。
codePointAtなど。 - StringとStringBuilder: たくさん結合するなら
StringBuilderが効率的。 - 正規表現:
matches,replaceAllで複雑なパターン処理。
