読み込み中...

Java文字列の大文字・小文字変換テクニック10選

Javaプログラミングでの大文字と小文字の変換テクニックを解説する記事のサムネイル Java
この記事は約30分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Javaで文字列を扱うとき、大文字と小文字の変換は入力値の正規化、検索条件の統一、ファイル名の整形でよく使われます。初心者がつまずきやすいのは、toUpperCase()toLowerCase()が元のStringを直接書き換えず、新しい文字列を返す点です。

変換後の値はString resultのような別変数へ受け取ります。英語以外ではLocaleで結果が変わる場合があるため、Javaプログラミングでも国際化を意識すると安全です。

動作確認環境
  • Java 21 LTS / javac 21
  • Apache Commons Lang 3.14.0
  • macOS / Windows / Linux の標準コンソールを想定
📖 この記事で学べること
  • JavaのStringで大文字と小文字を変換する基本
  • toUpperCasetoLowerCaseの使い分け
  • Localeを指定する理由と注意点
  • リスト、ファイル、ユーザー入力で使う変換テクニック
  • 文字化けや性能面で失敗しにくい対処法

Javaでの大文字と小文字の変換方法の基礎知識

Javaでは、文字列全体を大文字へ変換するならtoUpperCase()、小文字へ変換するならtoLowerCase()を使います。公式ドキュメントのStringクラスには、大文字小文字の変換、検索、置換、分割などのメソッドがまとまっています。

public class Main {
    public static void main(String[] args) {
        String text = "hello, java";
        String result = text.toUpperCase();
        System.out.println(result);
    }
}

結果: 期待される出力はHELLO, JAVAです。text自体は変更されず、resultに変換後の文字列が入りますが、これは押さえたい点です。

JavaのStringは不変です。toUpperCase()replace()を呼び出しても元の値は残り、戻り値を受け取った変数だけが別の値になります。

public class Main {
    public static void main(String[] args) {
        String text = "HELLO, JAVA";
        String result = text.toLowerCase();
        System.out.println(result);
    }
}

結果: 期待される出力はhello, javaです。toLowerCase()により英字部分が小文字へ変換されます。

文字列の扱い方

Javaの文字列は"sample"のようにダブルクォーテーションで囲み、型はStringです。charが1文字を表すのに対し、Stringは複数の文字を扱うクラスです。

length()substring()contains()replace()なども同じ形で呼び出せますし、ここがポイントです。大文字と小文字の変換もメソッド呼び出しなので、初心者でも読みやすいJavaコードにしやすいです。

大文字と小文字をそろえる目的

大文字と小文字をそろえる目的は、Javaの比較処理を安定させることです。ログインID、タグ検索、拡張子判定では、Adminadminを同じ値として扱いたい場面があります。

入力値をtoLowerCase()で統一してから比較すると、条件分岐が単純になります。ただし表示用まで小文字へ変換すると入力表記を失うため、保存用と表示用を分けますが、これは押さえたい点です。

💡 Tips: 検索や照合ではequalsIgnoreCase()も候補です。正規化した値を保存して再利用する場合は、toLowerCase(Locale.ROOT)のように変換結果を明示的に持つほうが扱いやすいです。

公式ドキュメントのLocaleクラスにある通り、言語や地域で文字の大文字化、小文字化の規則は変わります。Javaで国際化された文字列を扱うなら、Locale.ROOTや対象地域のLocaleを検討します。

用途主なAPI戻り値注意点使う場面
全体を大文字化toUpperCase()String既定ロケールの影響を受ける表示名の整形
全体を小文字化toLowerCase()String元の値は変わらないID正規化
ロケール固定Locale.ROOTLocale言語非依存に寄せる内部処理
トルコ語対応new Locale("tr", "TR")LocaleIの扱いに注意多言語UI
部分置換replace()String一致箇所がすべて対象キーワード修正
存在確認contains()boolean大文字小文字を区別条件分岐
範囲取得substring()String添字は0始まり接頭辞処理
長さ確認length()intコードユニット数入力チェック
配列化toCharArray()char[]補助文字に注意文字単位処理
文字判定Character.isDigit()booleanUnicode判定入力分類
大文字判定Character.isUpperCase()boolean英字以外も対象検証処理
小文字判定Character.isLowerCase()booleanUnicode対応検証処理
1文字大文字化Character.toUpperCase()char複数文字化は扱いにくい単純な文字処理
1文字小文字化Character.toLowerCase()charロケール非依存限定的な処理
結合StringBuilderStringBuilder最後にtoString()大量連結
リスト処理stream()Stream中間操作一括変換
写像map()Stream戻り値を返す要素変換
収集collect()List終端操作変換後リスト
簡易リストList.of()List不変リストサンプルデータ
標準入力ScannerStringクローズに注意コンソール入力
行入力nextLine()String空文字も取り得る入力受付
ファイル読込Files.readAllLines()List文字コード指定小規模ファイル
ストリーム読込Files.lines()Streamクローズが必要大きめのファイル
文字コードStandardCharsets.UTF_8Charset明示すると安定入出力
例外処理try構文リソース管理と組み合わせるファイル処理
リソース管理try-with-resources構文自動クローズ入出力
外部ライブラリStringUtilsString依存関係が必要複雑な置換
比較equalsIgnoreCase()boolean保存値は変わらない一時比較
空白除去trim()String古い空白扱い簡易整形
前後空白除去strip()StringUnicode空白に対応入力正規化

実用的なJavaの大文字と小文字の変換テクニック10選

Javaの変換テクニックは、toUpperCasetoLowerCaseだけでは終わりません。文字列の一部変更、ユーザー入力の正規化、リスト処理など、プログラミングの場面で組み合わせが変わります。

サンプルコード1:toUpperCaseメソッドの基本的な使い方

英字の小文字を大文字へそろえる基本です。日本語には英字のような大文字と小文字の区別がないため、Javaという英字部分だけが変換されます。

public class UpperCaseExample {
    public static void main(String[] args) {
        String original = "javaプログラミング";
        String upper = original.toUpperCase();
        System.out.println("変換前: " + original);
        System.out.println("変換後: " + upper);
    }
}

結果: 期待される出力は変換前: javaプログラミング変換後: JAVAプログラミングです。

サンプルコード2:toLowerCaseメソッドの基本的な使い方

入力値や識別子を小文字へそろえる場合はtoLowerCase()を使います。Java初心者は代入し忘れやすいため、戻り値を受け取る形を徹底します。

public class LowerCaseExample {
    public static void main(String[] args) {
        String original = "HELLO WORLD";
        String lower = original.toLowerCase();
        System.out.println(lower);
    }
}

結果: 期待される出力はhello worldです。originalにはHELLO WORLDが残りますし、これが一つの目安です。

public class AssignmentExample {
    public static void main(String[] args) {
        String name = "Java";
        name.toUpperCase();
        System.out.println(name);
    }
}

結果: 期待される出力はJavaです。戻り値を代入していないため、変換後の大文字は保存されません。

public class AssignmentFixedExample {
    public static void main(String[] args) {
        String name = "Java";
        name = name.toUpperCase();
        System.out.println(name);
    }
}

結果: 期待される出力はJAVAです。nameへ戻り値を代入すると、以降の処理では変換後の文字列を使えます。

サンプルコード3:特定のロケールを指定して変換

トルコ語では英字のiIの変換が英語圏と異なります。Javaで国際化された文字列を扱うなら、Localeを指定するテクニックが必要です。

import java.util.Locale;

public class LocaleUpperExample {
    public static void main(String[] args) {
        String text = "inşaat";
        Locale locale = new Locale("tr", "TR");
        String result = text.toUpperCase(locale);
        System.out.println(result);
    }
}

結果: 期待される出力はİNŞAATです。トルコ語の規則に沿ってiが変換されます。

import java.util.Locale;

public class LocaleRootExample {
    public static void main(String[] args) {
        String key = "UserName";
        String normalized = key.toLowerCase(Locale.ROOT);
        System.out.println(normalized);
    }
}

結果: 期待される出力はusernameです。内部キーの正規化ではLocale.ROOTを使うと、実行環境の既定ロケールに左右されにくくなります。

⚠️ 注意: toLowerCase()toUpperCase()を引数なしで使うと、既定ロケールの影響を受けますが、覚えておくと役立つでしょう。ログインIDや設定キーなど言語に依存しない値ではLocale.ROOTを検討してください。

サンプルコード4:文字列内の特定の部分を変換

文字列全体ではなく、特定のキーワードだけを変える場面もあるのが基本です。Javaではcontains()で確認し、replace()toLowerCase()を組み合わせます。

public class ReplaceExample {
    public static void main(String[] args) {
        String text = "Java is POWERFUL";
        String keyword = "POWERFUL";
        String result = text.replace(keyword, keyword.toLowerCase());
        System.out.println(result);
    }
}

結果: 期待される出力はJava is powerfulです。対象語だけが小文字へ変換されますが、覚えておくと役立つでしょう。

public class ContainsReplaceExample {
    public static void main(String[] args) {
        String text = "Learn Java with SAMPLE code";
        String keyword = "SAMPLE";

        if (text.contains(keyword)) {
            text = text.replace(keyword, keyword.toLowerCase());
        }
        System.out.println(text);
    }
}

結果: 期待される出力はLearn Java with sample codeです。contains()で条件を分けると、対象がない場合の処理を追加しやすくなります。

サンプルコード5:変換した結果を新しい変数に格納

元の文字列、変換後の大文字、変換後の小文字を別々に持つと比較が容易です。JavaのStringが不変である性質を前提に、変数名で用途を分けます。

public class StoreResultExample {
    public static void main(String[] args) {
        String original = "Java Programming";
        String upper = original.toUpperCase();
        String lower = original.toLowerCase();

        System.out.println(original);
        System.out.println(upper);
        System.out.println(lower);
    }
}

結果: 期待される出力はJava ProgrammingJAVA PROGRAMMINGjava programmingの順です。

public class CompareResultExample {
    public static void main(String[] args) {
        String input = "Java";
        String normalized = input.toLowerCase();
        boolean matched = normalized.equals("java");
        System.out.println(matched);
    }
}

結果: 期待される出力はtrueです。比較前に小文字へそろえると、条件が単純になります。

サンプルコード6:ユーザー入力を変換

フォームやコンソールから受け取った入力は表記が揺れます。JavaのScannerで受け取った文字列を変換してから保存や比較に回すと、初心者でも扱いやすい入力正規化になるのが基本です。

import java.util.Scanner;

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

        System.out.println(input.toUpperCase());
        System.out.println(input.toLowerCase());
    }
}

結果: 入力がHelloJavaなら、期待される出力はHELLOJAVAhellojavaです。

import java.util.Locale;
import java.util.Scanner;

public class UserNameNormalizeExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String userName = scanner.nextLine();
        String normalized = userName.strip().toLowerCase(Locale.ROOT);
        System.out.println(normalized);
    }
}

結果: 入力が JavaUser なら、期待される出力はjavauserです。strip()で前後の空白も取り除きます。

サンプルコード7:複数の方法を組み合わせて使用

全体を大文字へ変換してから一部だけを小文字へ戻す処理も作れます。substring()は開始位置と終了位置で範囲を切り出すため、添字に注意するのが目安です。

public class CombinedExample {
    public static void main(String[] args) {
        String original = "Java Programming is Fun";
        String upper = original.toUpperCase();
        String result = upper.substring(0, 4).toLowerCase() + upper.substring(4);
        System.out.println(result);
    }
}

結果: 期待される出力はjava PROGRAMMING IS FUNです。先頭4文字だけを小文字に戻しています。

public class PrefixExample {
    public static void main(String[] args) {
        String code = "dev-java-guide";
        String prefix = code.substring(0, 3).toUpperCase();
        String rest = code.substring(3);
        System.out.println(prefix + rest);
    }
}

結果: 期待される出力はDEV-java-guideです。接頭辞だけを大文字化する変換です。

サンプルコード8:文字列のリストを変換

複数の文字列をまとめて変換するならListStreamを組み合わせます。Javaのコレクション処理では、同じ変換メソッドを各要素へ適用できます。

import java.util.List;
import java.util.stream.Collectors;

public class ListUpperExample {
    public static void main(String[] args) {
        List<String> words = List.of("apple", "banana", "cherry");
        List<String> result = words.stream()
                .map(String::toUpperCase)
                .collect(Collectors.toList());
        System.out.println(result);
    }
}

結果: 期待される出力は[APPLE, BANANA, CHERRY]です。各要素にtoUpperCaseが適用されます。

import java.util.List;
import java.util.stream.Collectors;

public class ListLowerExample {
    public static void main(String[] args) {
        List<String> words = List.of("APPLE", "BANANA", "CHERRY");
        List<String> result = words.stream()
                .map(String::toLowerCase)
                .collect(Collectors.toList());
        System.out.println(result);
    }
}

結果: 期待される出力は[apple, banana, cherry]です。大文字のリストを小文字へそろえます。

サンプルコード9:Stream APIを利用した変換

変換後のリストを作るだけでなく、forEach()で出力までつなげられます。Stream APIは中間操作のmap()と終端操作のforEach()を分けて読みますし、ここを基本と考えるとよいでしょう。

import java.util.List;

public class StreamPrintExample {
    public static void main(String[] args) {
        List<String> words = List.of("java", "spring", "maven");
        words.stream()
                .map(String::toUpperCase)
                .forEach(System.out::println);
    }
}

結果: 期待される出力はJAVASPRINGMAVENが行ごとに表示される形です。

import java.util.List;
import java.util.Locale;

public class StreamNormalizeExample {
    public static void main(String[] args) {
        List<String> tags = List.of(" Java ", "PROGRAMMING", "Text");
        tags.stream()
                .map(String::strip)
                .map(s -> s.toLowerCase(Locale.ROOT))
                .forEach(System.out::println);
    }
}

結果: 期待される出力はjavaprogrammingtextです。空白除去と小文字変換を続けて行います。

サンプルコード10:ファイルから読み込んだ文字列の変換

ファイル処理では、文字コードを明示して読み込んだ行を変換します。小さな設定ファイルならFiles.readAllLines()、大きいファイルならFiles.lines()を検討するのがポイントです。

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;

public class FileUpperExample {
    public static void main(String[] args) throws IOException {
        List<String> lines = Files.readAllLines(Path.of("sample.txt"), StandardCharsets.UTF_8);
        for (String line : lines) {
            System.out.println(line.toUpperCase());
        }
    }
}

結果: sample.txthello javaが含まれる場合、期待される出力はHELLO JAVAです。

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;

public class FileLowerExample {
    public static void main(String[] args) throws IOException {
        try (Stream<String> lines = Files.lines(Path.of("sample.txt"), StandardCharsets.UTF_8)) {
            lines.map(String::toLowerCase)
                 .forEach(System.out::println);
        }
    }
}

結果: sample.txtHELLO JAVAが含まれる場合、期待される出力はhello javaです。try-with-resourcesによりストリームが閉じられます。

Javaのコレクション処理は、Java List型完全ガイドと合わせて読むと整理できます。特殊な文法要素ならJavaアノテーションの12選も関連知識です。

変換処理のカスタマイズ方法

標準メソッドで足りない場合は、独自メソッド、Character、外部ライブラリを組み合わせますし、ここがポイントです。何を大文字にし、何を小文字のまま残すのかを先に決めると、Javaコードの意図が伝わりますし、ここがポイントです。

新しいメソッドの作成

英字だけを対象にする、数字を残す、記号を除外する、といったルールをJavaのメソッドへ閉じ込めます。処理名をnormalizeUserNameconvertTagのように用途へ寄せると、プログラミング初心者にも読みやすくなるのが一般的です。

public class CustomMethodExample {
    public static String upperAlphabetOnly(String input) {
        StringBuilder result = new StringBuilder();
        for (char c : input.toCharArray()) {
            if (Character.isAlphabetic(c)) {
                result.append(Character.toUpperCase(c));
            } else {
                result.append(c);
            }
        }
        return result.toString();
    }

    public static void main(String[] args) {
        System.out.println(upperAlphabetOnly("java-123"));
    }
}

結果: 期待される出力はJAVA-123です。英字は大文字へ変換され、数字とハイフンはそのまま残ります。

public class CapitalizeExample {
    public static String capitalize(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
    }

    public static void main(String[] args) {
        System.out.println(capitalize("jAVA"));
    }
}

結果: 期待される出力はJavaです。先頭だけを大文字にし、残りを小文字へそろえます。

public class NullSafeExample {
    public static String lowerOrEmpty(String input) {
        return input == null ? "" : input.toLowerCase();
    }

    public static void main(String[] args) {
        System.out.println(lowerOrEmpty(null));
        System.out.println(lowerOrEmpty("JAVA"));
    }
}

結果: 期待される出力は空行とjavaです。nullを扱う可能性がある入力では、事前に分岐を入れるとNullPointerExceptionを避けられます。

ℹ️ 補足: Character.toUpperCase(char)は1文字単位の処理です。言語によっては大文字化で複数文字になるため、通常の文字列変換ではString.toUpperCase(Locale)を優先すると扱いやすいです。

既存のライブラリやフレームワークの利用

既存ライブラリを使うと、空文字やnullを含む文字列操作を短く書けます。Apache Commons LangのStringUtilsは代表例で、標準のJavaメソッドと併用できるのが現実的です。

import org.apache.commons.lang3.StringUtils;

public class CommonsReplaceExample {
    public static void main(String[] args) {
        String text = "Java programming is fun";
        String result = StringUtils.replace(text, "programming", "PROGRAMMING");
        System.out.println(result);
    }
}

結果: 期待される出力はJava PROGRAMMING is funです。特定の語だけを大文字表記へ置き換えています。

import org.apache.commons.lang3.StringUtils;

public class CommonsDefaultExample {
    public static void main(String[] args) {
        String text = null;
        String safe = StringUtils.defaultString(text).toLowerCase();
        System.out.println("[" + safe + "]");
    }
}

結果: 期待される出力は[]です。nullを空文字へ変換してから小文字化します。

外部ライブラリは依存関係が増えますが、これは押さえたい点です。短いJavaアプリなら標準APIで足りることが多く、既にCommons Langを使っているプロジェクトではStringUtilsを採用する使い分けが自然です。

注意点と対処法

Javaの文字列変換では、文字コード、ロケール、変換回数、nullに注意するのが目安です。大文字と小文字の変換は短く書けますが、入力元がファイルや外部システムになると失敗の原因が増えます。

エンコーディング問題とその対処法

文字化けは読み込み時と書き込み時の文字コードがずれたときに起こりますし、これが一つの目安です。Javaでファイルを読むときはStandardCharsets.UTF_8のように文字コードを明示すると、環境差を減らせます。

import java.nio.charset.StandardCharsets;

public class EncodingExample {
    public static void main(String[] args) {
        String original = "こんにちはJava";
        byte[] bytes = original.getBytes(StandardCharsets.UTF_8);
        String decoded = new String(bytes, StandardCharsets.UTF_8);
        System.out.println(decoded);
    }
}

結果: 期待される出力はこんにちはJavaです。同じUTF_8でバイト列化と復元を行います。

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class CharsetNameExample {
    public static void main(String[] args) {
        Charset charset = StandardCharsets.UTF_8;
        System.out.println(charset.name());
    }
}

結果: 期待される出力はUTF-8です。文字コード名を文字列で直接書くより、定数を使うとタイプミスを避けやすくなります。

パフォーマンス問題とその対処法

大量データでは、同じ文字列へ何度も変換をかける設計を避けますが、覚えておくと役立つでしょう。必要なタイミングで一度だけ正規化し、その結果を比較や保存へ使いるのがポイントです。

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder();
        builder.append("Java");
        builder.append(" ");
        builder.append("String");
        String result = builder.toString().toUpperCase();
        System.out.println(result);
    }
}

結果: 期待される出力はJAVA STRINGです。複数の文字列を組み立ててから大文字へ変換しています。

import java.util.Locale;

public class NormalizeOnceExample {
    public static void main(String[] args) {
        String input = "  Java  ";
        String normalized = input.strip().toLowerCase(Locale.ROOT);
        boolean ok = normalized.equals("java");
        System.out.println(ok);
    }
}

結果: 期待される出力はtrueです。空白除去と小文字化を一度行い、その結果を比較に使います。

⚠️ 注意: StringBufferは同期化された可変文字列です。単一スレッドで単純に連結するならStringBuilderが選ばれることが多く、共有状態を持つ設計では別途スレッド安全性を検討します。

関連する日付判定やエスケープ処理も、入力値を先に整える考え方が土台です。Javaの条件分岐はJavaでうるう年を判定、特殊文字の処理はJavaエスケープ処理が参考になると整理できるのが一般的です。

オブジェクト指向では、変換処理を親クラスや共通ユーティリティへ寄せる設計もあります。継承とメソッド再定義は、Javaでマスターするオーバーライドも合わせて確認できます。

まとめ

Javaで文字列を大文字へ変換するならtoUpperCase()、小文字へ変換するならtoLowerCase()を使いると理解できるのが現実的です。どちらも元のStringを直接変えず、新しい文字列を返すため、戻り値を変数で受け取ります。

Javaプログラミングではロケール、文字コード、空白、null、リスト処理、ファイル処理まで含めて設計します。Locale.ROOTStandardCharsets.UTF_8StringBuilderを使い分けると、変換テクニックが安定すると覚えるとよいでしょう。

初心者でも、ユーザー入力の正規化、検索条件の統一、ファイル内容の整形を読みやすいJavaコードで実装できると整理できます。大文字と小文字の扱いは、文字列処理全体の品質に直結します。

著者: Japanシーモア編集部

Japanシーモアは、Web/IoT/APP/SYS 分野のプログラミング情報を体系的に提供するメディアです。本記事は編集部による執筆とAI支援を組み合わせて制作し、公開前に編集部が校正しています。誤りや改善案がございましたらお問い合わせよりご連絡ください。

※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。

関連記事