はじめに
Javaで文字列を扱うとき、大文字と小文字の変換は入力値の正規化、検索条件の統一、ファイル名の整形でよく使われます。初心者がつまずきやすいのは、toUpperCase()とtoLowerCase()が元のStringを直接書き換えず、新しい文字列を返す点です。
変換後の値はString resultのような別変数へ受け取ります。英語以外ではLocaleで結果が変わる場合があるため、Javaプログラミングでも国際化を意識すると安全です。
- Java 21 LTS / javac 21
- Apache Commons Lang 3.14.0
- macOS / Windows / Linux の標準コンソールを想定
- Javaの
Stringで大文字と小文字を変換する基本 toUpperCaseとtoLowerCaseの使い分けLocaleを指定する理由と注意点- リスト、ファイル、ユーザー入力で使う変換テクニック
- 文字化けや性能面で失敗しにくい対処法
Javaでの大文字と小文字の変換方法の基礎知識
Javaでは、文字列全体を大文字へ変換するならtoUpperCase()、小文字へ変換するならtoLowerCase()を使います。公式ドキュメントのStringクラスには、大文字小文字の変換、検索、置換、分割などのメソッドがまとまっています。
結果: 期待される出力はHELLO, JAVAです。text自体は変更されず、resultに変換後の文字列が入りますが、これは押さえたい点です。
JavaのStringは不変です。toUpperCase()やreplace()を呼び出しても元の値は残り、戻り値を受け取った変数だけが別の値になります。
結果: 期待される出力はhello, javaです。toLowerCase()により英字部分が小文字へ変換されます。
文字列の扱い方
Javaの文字列は"sample"のようにダブルクォーテーションで囲み、型はStringです。charが1文字を表すのに対し、Stringは複数の文字を扱うクラスです。
length()、substring()、contains()、replace()なども同じ形で呼び出せますし、ここがポイントです。大文字と小文字の変換もメソッド呼び出しなので、初心者でも読みやすいJavaコードにしやすいです。
大文字と小文字をそろえる目的
大文字と小文字をそろえる目的は、Javaの比較処理を安定させることです。ログインID、タグ検索、拡張子判定では、Adminとadminを同じ値として扱いたい場面があります。
入力値をtoLowerCase()で統一してから比較すると、条件分岐が単純になります。ただし表示用まで小文字へ変換すると入力表記を失うため、保存用と表示用を分けますが、これは押さえたい点です。
💡 Tips: 検索や照合ではequalsIgnoreCase()も候補です。正規化した値を保存して再利用する場合は、toLowerCase(Locale.ROOT)のように変換結果を明示的に持つほうが扱いやすいです。
公式ドキュメントのLocaleクラスにある通り、言語や地域で文字の大文字化、小文字化の規則は変わります。Javaで国際化された文字列を扱うなら、Locale.ROOTや対象地域のLocaleを検討します。
| 用途 | 主なAPI | 戻り値 | 注意点 | 使う場面 |
|---|---|---|---|---|
| 全体を大文字化 | toUpperCase() | String | 既定ロケールの影響を受ける | 表示名の整形 |
| 全体を小文字化 | toLowerCase() | String | 元の値は変わらない | ID正規化 |
| ロケール固定 | Locale.ROOT | Locale | 言語非依存に寄せる | 内部処理 |
| トルコ語対応 | new Locale("tr", "TR") | Locale | Iの扱いに注意 | 多言語UI |
| 部分置換 | replace() | String | 一致箇所がすべて対象 | キーワード修正 |
| 存在確認 | contains() | boolean | 大文字小文字を区別 | 条件分岐 |
| 範囲取得 | substring() | String | 添字は0始まり | 接頭辞処理 |
| 長さ確認 | length() | int | コードユニット数 | 入力チェック |
| 配列化 | toCharArray() | char[] | 補助文字に注意 | 文字単位処理 |
| 文字判定 | Character.isDigit() | boolean | Unicode判定 | 入力分類 |
| 大文字判定 | Character.isUpperCase() | boolean | 英字以外も対象 | 検証処理 |
| 小文字判定 | Character.isLowerCase() | boolean | Unicode対応 | 検証処理 |
| 1文字大文字化 | Character.toUpperCase() | char | 複数文字化は扱いにくい | 単純な文字処理 |
| 1文字小文字化 | Character.toLowerCase() | char | ロケール非依存 | 限定的な処理 |
| 結合 | StringBuilder | StringBuilder | 最後にtoString() | 大量連結 |
| リスト処理 | stream() | Stream | 中間操作 | 一括変換 |
| 写像 | map() | Stream | 戻り値を返す | 要素変換 |
| 収集 | collect() | List | 終端操作 | 変換後リスト |
| 簡易リスト | List.of() | List | 不変リスト | サンプルデータ |
| 標準入力 | Scanner | String | クローズに注意 | コンソール入力 |
| 行入力 | nextLine() | String | 空文字も取り得る | 入力受付 |
| ファイル読込 | Files.readAllLines() | List | 文字コード指定 | 小規模ファイル |
| ストリーム読込 | Files.lines() | Stream | クローズが必要 | 大きめのファイル |
| 文字コード | StandardCharsets.UTF_8 | Charset | 明示すると安定 | 入出力 |
| 例外処理 | try | 構文 | リソース管理と組み合わせる | ファイル処理 |
| リソース管理 | try-with-resources | 構文 | 自動クローズ | 入出力 |
| 外部ライブラリ | StringUtils | String | 依存関係が必要 | 複雑な置換 |
| 比較 | equalsIgnoreCase() | boolean | 保存値は変わらない | 一時比較 |
| 空白除去 | trim() | String | 古い空白扱い | 簡易整形 |
| 前後空白除去 | strip() | String | Unicode空白に対応 | 入力正規化 |
実用的なJavaの大文字と小文字の変換テクニック10選
Javaの変換テクニックは、toUpperCaseやtoLowerCaseだけでは終わりません。文字列の一部変更、ユーザー入力の正規化、リスト処理など、プログラミングの場面で組み合わせが変わります。
サンプルコード1:toUpperCaseメソッドの基本的な使い方
英字の小文字を大文字へそろえる基本です。日本語には英字のような大文字と小文字の区別がないため、Javaという英字部分だけが変換されます。
結果: 期待される出力は変換前: javaプログラミングと変換後: JAVAプログラミングです。
サンプルコード2:toLowerCaseメソッドの基本的な使い方
入力値や識別子を小文字へそろえる場合はtoLowerCase()を使います。Java初心者は代入し忘れやすいため、戻り値を受け取る形を徹底します。
結果: 期待される出力はhello worldです。originalにはHELLO WORLDが残りますし、これが一つの目安です。
結果: 期待される出力はJavaです。戻り値を代入していないため、変換後の大文字は保存されません。
結果: 期待される出力はJAVAです。nameへ戻り値を代入すると、以降の処理では変換後の文字列を使えます。
サンプルコード3:特定のロケールを指定して変換
トルコ語では英字のiやIの変換が英語圏と異なります。Javaで国際化された文字列を扱うなら、Localeを指定するテクニックが必要です。
結果: 期待される出力はİNŞAATです。トルコ語の規則に沿ってiが変換されます。
結果: 期待される出力はusernameです。内部キーの正規化ではLocale.ROOTを使うと、実行環境の既定ロケールに左右されにくくなります。
toLowerCase()とtoUpperCase()を引数なしで使うと、既定ロケールの影響を受けますが、覚えておくと役立つでしょう。ログインIDや設定キーなど言語に依存しない値ではLocale.ROOTを検討してください。サンプルコード4:文字列内の特定の部分を変換
文字列全体ではなく、特定のキーワードだけを変える場面もあるのが基本です。Javaではcontains()で確認し、replace()とtoLowerCase()を組み合わせます。
結果: 期待される出力はJava is powerfulです。対象語だけが小文字へ変換されますが、覚えておくと役立つでしょう。
結果: 期待される出力はLearn Java with sample codeです。contains()で条件を分けると、対象がない場合の処理を追加しやすくなります。
サンプルコード5:変換した結果を新しい変数に格納
元の文字列、変換後の大文字、変換後の小文字を別々に持つと比較が容易です。JavaのStringが不変である性質を前提に、変数名で用途を分けます。
結果: 期待される出力はJava Programming、JAVA PROGRAMMING、java programmingの順です。
結果: 期待される出力はtrueです。比較前に小文字へそろえると、条件が単純になります。
サンプルコード6:ユーザー入力を変換
フォームやコンソールから受け取った入力は表記が揺れます。JavaのScannerで受け取った文字列を変換してから保存や比較に回すと、初心者でも扱いやすい入力正規化になるのが基本です。
結果: 入力がHelloJavaなら、期待される出力はHELLOJAVAとhellojavaです。
結果: 入力が JavaUser なら、期待される出力はjavauserです。strip()で前後の空白も取り除きます。
サンプルコード7:複数の方法を組み合わせて使用
全体を大文字へ変換してから一部だけを小文字へ戻す処理も作れます。substring()は開始位置と終了位置で範囲を切り出すため、添字に注意するのが目安です。
結果: 期待される出力はjava PROGRAMMING IS FUNです。先頭4文字だけを小文字に戻しています。
結果: 期待される出力はDEV-java-guideです。接頭辞だけを大文字化する変換です。
サンプルコード8:文字列のリストを変換
複数の文字列をまとめて変換するならListとStreamを組み合わせます。Javaのコレクション処理では、同じ変換メソッドを各要素へ適用できます。
結果: 期待される出力は[APPLE, BANANA, CHERRY]です。各要素にtoUpperCaseが適用されます。
結果: 期待される出力は[apple, banana, cherry]です。大文字のリストを小文字へそろえます。
サンプルコード9:Stream APIを利用した変換
変換後のリストを作るだけでなく、forEach()で出力までつなげられます。Stream APIは中間操作のmap()と終端操作のforEach()を分けて読みますし、ここを基本と考えるとよいでしょう。
結果: 期待される出力はJAVA、SPRING、MAVENが行ごとに表示される形です。
結果: 期待される出力はjava、programming、textです。空白除去と小文字変換を続けて行います。
サンプルコード10:ファイルから読み込んだ文字列の変換
ファイル処理では、文字コードを明示して読み込んだ行を変換します。小さな設定ファイルならFiles.readAllLines()、大きいファイルならFiles.lines()を検討するのがポイントです。
結果: sample.txtにhello javaが含まれる場合、期待される出力はHELLO JAVAです。
結果: sample.txtにHELLO JAVAが含まれる場合、期待される出力はhello javaです。try-with-resourcesによりストリームが閉じられます。
Javaのコレクション処理は、Java List型完全ガイドと合わせて読むと整理できます。特殊な文法要素ならJavaアノテーションの12選も関連知識です。
変換処理のカスタマイズ方法
標準メソッドで足りない場合は、独自メソッド、Character、外部ライブラリを組み合わせますし、ここがポイントです。何を大文字にし、何を小文字のまま残すのかを先に決めると、Javaコードの意図が伝わりますし、ここがポイントです。
新しいメソッドの作成
英字だけを対象にする、数字を残す、記号を除外する、といったルールをJavaのメソッドへ閉じ込めます。処理名をnormalizeUserNameやconvertTagのように用途へ寄せると、プログラミング初心者にも読みやすくなるのが一般的です。
結果: 期待される出力はJAVA-123です。英字は大文字へ変換され、数字とハイフンはそのまま残ります。
結果: 期待される出力はJavaです。先頭だけを大文字にし、残りを小文字へそろえます。
結果: 期待される出力は空行とjavaです。nullを扱う可能性がある入力では、事前に分岐を入れるとNullPointerExceptionを避けられます。
Character.toUpperCase(char)は1文字単位の処理です。言語によっては大文字化で複数文字になるため、通常の文字列変換ではString.toUpperCase(Locale)を優先すると扱いやすいです。既存のライブラリやフレームワークの利用
既存ライブラリを使うと、空文字やnullを含む文字列操作を短く書けます。Apache Commons LangのStringUtilsは代表例で、標準のJavaメソッドと併用できるのが現実的です。
結果: 期待される出力はJava PROGRAMMING is funです。特定の語だけを大文字表記へ置き換えています。
結果: 期待される出力は[]です。nullを空文字へ変換してから小文字化します。
外部ライブラリは依存関係が増えますが、これは押さえたい点です。短いJavaアプリなら標準APIで足りることが多く、既にCommons Langを使っているプロジェクトではStringUtilsを採用する使い分けが自然です。
注意点と対処法
Javaの文字列変換では、文字コード、ロケール、変換回数、nullに注意するのが目安です。大文字と小文字の変換は短く書けますが、入力元がファイルや外部システムになると失敗の原因が増えます。
エンコーディング問題とその対処法
文字化けは読み込み時と書き込み時の文字コードがずれたときに起こりますし、これが一つの目安です。Javaでファイルを読むときはStandardCharsets.UTF_8のように文字コードを明示すると、環境差を減らせます。
結果: 期待される出力はこんにちはJavaです。同じUTF_8でバイト列化と復元を行います。
結果: 期待される出力はUTF-8です。文字コード名を文字列で直接書くより、定数を使うとタイプミスを避けやすくなります。
パフォーマンス問題とその対処法
大量データでは、同じ文字列へ何度も変換をかける設計を避けますが、覚えておくと役立つでしょう。必要なタイミングで一度だけ正規化し、その結果を比較や保存へ使いるのがポイントです。
結果: 期待される出力はJAVA STRINGです。複数の文字列を組み立ててから大文字へ変換しています。
結果: 期待される出力はtrueです。空白除去と小文字化を一度行い、その結果を比較に使います。
StringBufferは同期化された可変文字列です。単一スレッドで単純に連結するならStringBuilderが選ばれることが多く、共有状態を持つ設計では別途スレッド安全性を検討します。関連する日付判定やエスケープ処理も、入力値を先に整える考え方が土台です。Javaの条件分岐はJavaでうるう年を判定、特殊文字の処理はJavaエスケープ処理が参考になると整理できるのが一般的です。
オブジェクト指向では、変換処理を親クラスや共通ユーティリティへ寄せる設計もあります。継承とメソッド再定義は、Javaでマスターするオーバーライドも合わせて確認できます。
まとめ
Javaで文字列を大文字へ変換するならtoUpperCase()、小文字へ変換するならtoLowerCase()を使いると理解できるのが現実的です。どちらも元のStringを直接変えず、新しい文字列を返すため、戻り値を変数で受け取ります。
Javaプログラミングではロケール、文字コード、空白、null、リスト処理、ファイル処理まで含めて設計します。Locale.ROOT、StandardCharsets.UTF_8、StringBuilderを使い分けると、変換テクニックが安定すると覚えるとよいでしょう。
初心者でも、ユーザー入力の正規化、検索条件の統一、ファイル内容の整形を読みやすいJavaコードで実装できると整理できます。大文字と小文字の扱いは、文字列処理全体の品質に直結します。
※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。


