Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】大文字・小文字を区別せずに部分文字列が含まれるか判定する方法

Javaで文字列の中に特定の部分文字列が含まれているかどうかを、大文字・小文字を区別せずに確認したい場面はよくあります。この記事では、toLowerCase()メソッドとcontains()メソッドを組み合わせた基本的な実装方法を、実際のコード例とともに解説します。

使用するメソッドの概要

contains() メソッド

String クラスの contains() メソッドは、引数として文字列を受け取り、現在の文字列オブジェクトの中に指定した文字列が含まれているかどうかを検証します。含まれていれば true を、含まれていなければ false を返します。

toLowerCase() メソッド

String クラスの toLowerCase() メソッドは、現在の文字列に含まれるすべての文字を小文字に変換した新しい文字列を返します。

大文字・小文字を区別せずに部分文字列を検索する手順

  • 対象となる文字列を取得する。
  • 検索したい部分文字列を取得する。
  • toLowerCase() メソッドを使って文字列本体を小文字に変換し、fileContents として保持する。
  • 同様に toLowerCase() メソッドを使って部分文字列も小文字に変換し、subString として保持する。
  • subString を引数として渡し、fileContents に対して contains() メソッドを呼び出す。

両方の文字列をあらかじめ小文字に揃えておくことで、大文字・小文字の違いを無視した比較が可能になります。

実装例

D ディレクトリに、次のような内容の sample.txt ファイルが存在すると仮定します。

Tutorials point originated from the idea that there exists a class of readers who respond better to on-line content
and prefer to learn new skills at their own pace from the comforts of their drawing rooms.
At Tutorials point we provide high quality learning-aids for free of cost.

次のJavaプログラムでは、ユーザーから部分文字列を入力として受け取り、大文字・小文字を区別せずにファイル内にその部分文字列が含まれているかどうかを判定します。

import java.io.File;
import java.util.Scanner;
public class SubStringExample {
    public static String fileToString(String filePath) throws Exception{
        String input = null;
        Scanner sc = new Scanner(new File(filePath));
        StringBuffer sb = new StringBuffer();
        while (sc.hasNextLine()) {
            input = sc.nextLine();
            sb.append(input);
        }
        return sb.toString();
    }
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("検証する部分文字列を入力してください: ");
        String subString = sc.next();
        String fileContents = fileToString("D:\\sample.txt");
        // ファイルの内容を小文字に変換
        fileContents = fileContents.toLowerCase();
        // 部分文字列を小文字に変換
        subString = subString.toLowerCase();
        // ファイルに指定された部分文字列が含まれているか確認
        boolean result = fileContents.contains(subString);
        if(result) {
            System.out.println("ファイルに指定された部分文字列が含まれています。");
        } else {
            System.out.println("ファイルに指定された部分文字列は含まれていません。");
        }
    }
}

実行結果

検証する部分文字列を入力してください:
comforts of their drawing rooms.
ファイルに指定された部分文字列が含まれています。

補足:より堅牢な実装のためのポイント

上記のコードは基本形ですが、実務では以下の点にも注意するとより安全です。

  • Locale の指定: toLowerCase() は環境のデフォルトロケールに依存するため、toLowerCase(Locale.ROOT) を使うと予期しない挙動(トルコ語の i 問題など)を回避できます。
  • Apache Commons Lang の利用: StringUtils.containsIgnoreCase(str, searchStr) を使えば、変換処理を書かずに1行で大文字・小文字を区別しない判定が可能です。
  • 正規表現を使う方法: Pattern.compile(Pattern.quote(subString), Pattern.CASE_INSENSITIVE) を利用する方法もあります。部分一致だけでなく柔軟なパターンマッチングが必要な場合に有効です。
  1. Pythonで文字列が大文字のみで構成されているか確認する方法

    Pythonでは、文字列が大文字のみで構成されているかどうかを確認する方法は主に2つあります。1つ目は組み込みメソッド isupper() を使う方法、2つ目は正規表現(regex)を使う方法です。 方法1:isupper() メソッドを使う isupper() は、文字列内のすべての英字が大文字であり、かつ少なくとも1つの英字が含まれている場合に True を返します。数字や記号が混在していても、英字がすべて大文字であれば True になります。 例 print(Hello world.isupper()) print(HELLO.isupper()) 出力 False True 最

  2. Pythonで文字列が小文字のみで構成されているか判定する2つの方法

    Pythonでは、文字列がすべて小文字で構成されているかどうかを簡単に判定できます。主な方法は2つあり、1つ目は文字列メソッドの islower() を使う方法、2つ目は正規表現を使う方法です。それぞれの特徴と違いを見ていきましょう。 方法1:islower() メソッドを使う islower() は、文字列内の英字がすべて小文字である場合に True を返します。数字やスペースなどの英字以外の文字は判定の対象外となる点に注意してください。 print(Hello world.islower()) print(hello world.islower()) 出力: False True