Java入門 #5 - 文字列の基本操作(String)

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

このシリーズについて

「Java入門」は1本1テーマで進む全15回のシリーズです。本記事はその第5回として、Javaで最も頻繁に扱う**文字列(String)**の基本操作を解説します。

前提条件: Java入門 #1 - 開発環境構築 でJDK 21 がインストール済み。変数とデータ型の基礎を理解済み。

Stringとは

Javaでは文字列を扱うために String クラスを使います。ダブルクォート(")で囲んだものが文字列リテラルとして認識されます。

// Java 21
String greeting = "こんにちは";
String name = "太郎";

String は参照型であり、不変(immutable) です。一度作成した文字列の内容を変更することはできません。

ポイント: 文字列を変更したい場合は、新しい String オブジェクトが生成されます。元の文字列自体は変わりません。

文字列の生成

String は3つの方法で生成できます。

方法構文推奨度
リテラルString s = "Hello";★★★
コンストラクタString s = new String("Hello");△(非推奨)
他の型から変換String.valueOf(123)★★

リテラルを使うのが最も一般的で、文字列プールにより効率的です。

// 推奨
String message = "Hello, World!";

// 非推奨(メモリ効率が悪い)
String message2 = new String("Hello, World!");

文字列の連結

+ 演算子で文字列を連結できます。

String first = "Hello";
String second = "World";
String result = first + ", " + second + "!"; // "Hello, World!"

補足: Java 15以降、コンパイラが内部的に StringBuilder を使うため、複数の + でも効率的です。ループ内で大量に連結する場合のみ StringBuilder を明示的に使いましょう。

主要メソッド一覧

String クラスには多くのメソッドがありますが、まず覚えるべきものは以下の10個です。

メソッド説明戻り値
length()文字列の長さを返すint
charAt(int index)指定位置の文字を返す(0始まり)char
substring(int beginIndex)指定位置から末尾までの部分文字列String
substring(int beginIndex, int endIndex)指定範囲の部分文字列(endIndexは含まない)String
indexOf(String str)指定文字列が最初に出現する位置(見つからなければ-1)int
equals(Object obj)内容が同じかを比較boolean
equalsIgnoreCase(String str)大文字小文字を無視して比較boolean
trim()前後の空白を除去String
toUpperCase()すべて大文字に変換String
toLowerCase()すべて小文字に変換String

実例:基本操作

以下のコードで主要メソッドの使い方を確認します。

// Java 21
public class StringBasics {
 public static void main(String[] args) {
 String message = "Hello, Java 21!";

 // 長さを取得
 int len = message.length();
 System.out.println("長さ: " + len); // 16

 // 指定位置の文字を取得(0始まり)
 char firstChar = message.charAt(0);
 System.out.println("最初の文字: " + firstChar); // 'H'

 // 部分文字列を取得
 String sub1 = message.substring(7); // "Java 21!"
 String sub2 = message.substring(7, 11); // "Java"(11は含まない)
 System.out.println("substring(7): " + sub1);
 System.out.println("substring(7, 11): " + sub2);

 // 文字列の検索
 int index = message.indexOf("Java");
 System.out.println("'Java' の位置: " + index); // 7

 // 見つからない場合
 int notFound = message.indexOf("Python");
 System.out.println("'Python' の位置: " + notFound); // -1
 }
}

実行すると以下のように出力されます。

長さ: 16
最初の文字: H
substring(7): Java 21!
substring(7, 11): Java
'Java' の位置: 7
'Python' の位置: -1

文字列の比較:equals() vs ==

重要: 文字列の内容を比較するには equals() を使います。==同一のオブジェクトかどうかを判定するため、内容が同じでも false になることがあります。

// Java 21
public class StringComparison {
 public static void main(String[] args) {
 String s1 = "Hello";
 String s2 = "Hello";
 String s3 = new String("Hello");

 // リテラルは文字列プールを共有するので同じオブジェクト
 System.out.println(s1 == s2); // true(同じ参照)
 System.out.println(s1.equals(s2)); // true(内容が同じ)

 // new String() は別オブジェクトを生成
 System.out.println(s1 == s3); // false(異なる参照)
 System.out.println(s1.equals(s3)); // true(内容が同じ)
 }
}

注意: 文字列の比較に == を使うと意図しない動作になる可能性があります。必ず equals() を使いましょう

大文字小文字を無視した比較

equalsIgnoreCase() を使うと、大文字小文字の違いを無視して比較できます。

String a = "Java";
String b = "JAVA";

System.out.println(a.equals(b)); // false
System.out.println(a.equalsIgnoreCase(b)); // true

前後の空白を除去:trim()

trim() は文字列の前後にある空白(スペース、タブ、改行)を除去した新しい文字列を返します。

String input = " Hello ";
String trimmed = input.trim();
System.out.println("'" + trimmed + "'"); // 'Hello'

ポイント: Java 11以降では strip() / stripLeading() / stripTrailing() も利用できます。これらはUnicodeの空白文字にも対応しています。

大文字・小文字変換

String text = "Hello World";
System.out.println(text.toUpperCase()); // "HELLO WORLD"
System.out.println(text.toLowerCase()); // "hello world"

実例:ユーザー入力の正規化

実際のプログラムでは、ユーザーが入力した文字列を整形してから処理することがよくあります。

// Java 21
import java.util.Scanner;

public class InputNormalization {
 public static void main(String[] args) {
 Scanner scanner = new Scanner(System.in);
 System.out.print("名前を入力してください: ");
 String input = scanner.nextLine();

 // 前後の空白を削除し、すべて小文字に変換
 String normalized = input.trim().toLowerCase();

 if (normalized.equals("admin")) {
 System.out.println("管理者としてログインしました");
 } else {
 System.out.println("ようこそ、" + input.trim() + "さん");
 }

 scanner.close();
 }
}

このコードは以下を実現しています。

  • trim() で余分な空白を除去
  • toLowerCase() で大文字小文字を統一
  • equals() で安全に比較

よくあるミス

ミス正しい書き方
if (s == "Hello")if (s.equals("Hello"))
s[0] で文字を取得s.charAt(0)
substring(7, 10) で10文字目を含むsubstring(7, 11)(終了indexは含まない)
文字列を変更しようとする新しいStringを生成する

次のステップ

Java入門 #6 - 条件分岐(if / else if / else) で、文字列の比較結果をもとに処理を分岐させる方法を学びます。

まとめ

この記事では、手順を追って動かしながら重要な確認ポイントを押さえることが大切です。まずは学習用の最小構成で動作確認し、本番利用する前にセキュリティ、権限、エラー処理、運用手順を見直してください。

参考リソース

← 一覧に戻る
PR
PR
PR
PR