ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本的な使い方
String a = "Hello";
String b = "HELLO";
a.equals(b); // false — 大文字小文字が違う
a.equalsIgnoreCase(b); // true — 大文字小文字を無視
"java".equalsIgnoreCase("JAVA"); // true
"abc".equalsIgnoreCase("abcd"); // false — 長さ違い
"".equalsIgnoreCase(""); // true
// 数字や記号は通常通り比較
"123".equalsIgnoreCase("123"); // true
"a@b".equalsIgnoreCase("A@B"); // true
equals と equalsIgnoreCase の使い分け
| 場面 | 推奨 | 理由 |
|---|---|---|
| パスワード比較 | equals | 大文字小文字も区別すべき |
| ID / トークン比較 | equals | 厳密一致が必要 |
| メールアドレス | equalsIgnoreCase | ドメインは case 非依存(RFC) |
| ファイル拡張子 | equalsIgnoreCase | .JPG と .jpg は同じ扱い |
| HTTP メソッド | equalsIgnoreCase | case 非依存(RFC 7230) |
| 列挙値("yes"/"no") | equalsIgnoreCase | ユーザ入力の揺れ吸収 |
null 安全な書き方
str.equalsIgnoreCase(null) は false を返すので右辺は null OK。ただし左辺が null だと NPE:
String a = null;
String b = "HELLO";
// ❌ NullPointerException
// a.equalsIgnoreCase(b);
// ✅ null チェック
if (a != null && a.equalsIgnoreCase(b)) { ... }
// ✅ null を考慮した片方向比較
"HELLO".equalsIgnoreCase(a); // false — null OK
// ✅ 定数を左に置く(Yoda 記法)
// 定数なら null にならないので NPE 起きない
"admin".equalsIgnoreCase(input); // input が null でも false
// ❌ Objects.equals は使えない(大文字小文字を見ない)
Objects.equals("HELLO", "hello"); // false
// ✅ Objects 系で null セーフかつ ignore case
boolean eq = a == b ||
(a != null && a.equalsIgnoreCase(b));
Locale の罠(トルコ語の I 問題)
標準 equalsIgnoreCase はLocale 非依存で安全ですが、toLowerCase() 経由の比較は危険:
import java.util.Locale;
// トルコ語ロケールだと "I".toLowerCase() == "ı" (ドットなし)
Locale tr = new Locale("tr", "TR");
"FILE".toLowerCase(tr); // "fıle" ← ドットなし i!
"FILE".toLowerCase(tr).equals("file"); // false
// ❌ 危険: ユーザの Locale 依存
if ("ADMIN".toLowerCase().equals("admin")) { ... }
// ✅ 安全1: equalsIgnoreCase は内部で Locale 非依存比較
if ("ADMIN".equalsIgnoreCase("admin")) { ... }
// ✅ 安全2: Locale.ROOT 指定
if ("ADMIN".toLowerCase(Locale.ROOT).equals("admin")) { ... }
equalsIgnoreCase の内部実装
JDK 内部では1 文字ずつ Character.toUpperCase / toLowerCase で比較。サロゲートペアや特殊文字は完全対応ではないので、Unicode 厳密比較が必要なら Collator を使います:
import java.text.Collator;
Collator collator = Collator.getInstance(Locale.JAPANESE);
collator.setStrength(Collator.SECONDARY); // case 無視
collator.compare("ABC", "abc") == 0; // true
collator.compare("ハンカク", "ハンカク") == 0; // 半角全角同一視(要 Strength 設定)
// 大量比較は CollationKey でキャッシュ
CollationKey k1 = collator.getCollationKey("Apple");
CollationKey k2 = collator.getCollationKey("apple");
k1.compareTo(k2) == 0; // true
compareToIgnoreCase(順序比較)
// 等値だけでなく順序が欲しいとき
"apple".compareToIgnoreCase("BANANA"); // 負(apple < banana)
// ソート
List<String> list = Arrays.asList("Banana", "apple", "Cherry");
list.sort(String.CASE_INSENSITIVE_ORDER);
// [apple, Banana, Cherry]
// Comparator
Comparator<String> c = Comparator.comparing(String::toLowerCase);
list.sort(c);
他言語の同等機能
| 言語 | 記法 | 備考 |
|---|---|---|
| Java | a.equalsIgnoreCase(b) | Locale 非依存 |
| Kotlin | a.equals(b, ignoreCase = true) | 標準ライブラリ |
| C# | string.Equals(a, b, StringComparison.OrdinalIgnoreCase) | Ordinal が安全 |
| JavaScript | a.toLowerCase() === b.toLowerCase() | locale-aware なら localeCompare |
| Python | a.casefold() == b.casefold() | Unicode 厳密 |
| PHP | strcasecmp($a, $b) === 0 | マルチバイトは mb_strtolower |
Unicode 厳密比較(casefold 相当)
// Java には casefold ピッタリは無い。Normalizer + toLowerCase
import java.text.Normalizer;
static String foldCase(String s) {
return Normalizer.normalize(s, Normalizer.Form.NFKC)
.toLowerCase(Locale.ROOT);
}
foldCase("file").equals(foldCase("FILE")); // true (合字fi→fi)
foldCase("Ⅷ").equals(foldCase("VIII")); // true (ローマ数字)
FAQ
Q: equalsIgnoreCase で日本語の比較は?
A: ひらがな・カタカナ・漢字には case 概念が無いので equals と同じ動作。半角全角の区別は残る。
Q: 高速化したい
A: ハッシュマップに入れるなら key.toLowerCase(Locale.ROOT) で正規化してから格納。比較毎の toLowerCase 呼び出しを避ける。
Q: equalsIgnoreCase は Unicode 完全対応?
A: 基本対応だが、サロゲートペアや特殊な合字は厳密ではない。Unicode 仕様準拠が必要なら ICU4J の UCharacter.foldCase。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- String.equals
- String.equalsIgnoreCase(大文字小文字を無視した等値比較)
- StringBuffer
- String.length
- String.trim
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?