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

Javaで文字列がASCII文字のみかどうかを判定する方法

Javaでは、入力値のバリデーションや外部システムとのデータ連携の際に、「文字列がASCII文字のみで構成されているか」を確認したいケースがあります。本記事では、正規表現を使う方法各文字のコード値を1つずつ検証する方法という2つのアプローチを、サンプルコードと実行結果付きでわかりやすく解説します。

方法1:正規表現を使って判定する

ASCII文字のみで構成される文字列は、次の正規表現で表現できます。

\A\p{ASCII}*\z

Stringクラスのmatches()メソッドは、引数に渡した正規表現と現在の文字列が一致すればtrue、一致しなければfalseを返します。判定したい文字列に対してこのメソッドを呼び出し、上記の正規表現を渡すだけで、ASCII文字のみかどうかを簡単に確認できます。

サンプルコード

import java.util.Scanner;
public class OnlyASCII {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("文字列を入力してください:");
        String input = sc.nextLine();
        // ASCII文字のみかどうかを判定
        boolean result = input.matches("\\A\\p{ASCII}*\\z");
        if(result) {
            System.out.println("ASCII文字のみです");
        } else {
            System.out.println("非ASCII文字が含まれています");
        }
    }
}

実行結果1(ASCIIのみの場合)

文字列を入力してください:
hello how are you
ASCII文字のみです

実行結果2(非ASCII文字を含む場合)

文字列を入力してください:
whÿ do we fall
非ASCII文字が含まれています

方法2:各文字を1つずつ検証する

ASCII文字をint型に変換すると、その値は必ず127以下になります。この性質を利用すれば、正規表現を使わずに判定することも可能です。

  • StringクラスのcharAt()メソッドは、引数で指定したインデックス位置にある文字を返します。
  • このメソッドで文字列内の各文字を順に取得し、そのコード値が127より大きいかどうかを調べます。

サンプルコード

import java.util.Scanner;
public class OnlyASCII {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("文字列を入力してください:");
        String input = sc.next();
        boolean result = true;
        for(int i = 0; i < input.length(); i++) {
            int test = (int)input.charAt(i);
            if(test > 127) {
                result = false;
                break;
            }
        }
        System.out.println(result);
        if(result) {
            System.out.println("ASCII文字のみです");
        } else {
            System.out.println("非ASCII文字が含まれています");
        }
    }
}

実行結果1(非ASCII文字を含む場合)

文字列を入力してください:
whÿ
false
非ASCII文字が含まれています

実行結果2(ASCIIのみの場合)

文字列を入力してください:
hello
true
ASCII文字のみです

まとめ

正規表現を使う方法はコードが簡潔で可読性が高く、少ない行数で実装できるのが魅力です。一方、各文字を検証する方法は処理の流れが明確で、許容する文字の範囲などを細かくカスタマイズしやすいという利点があります。用途やプロジェクトのコーディング規約に応じて、適切な方法を選択しましょう。なお、より厳密なエンコーディング検証が必要な場合は、java.nio.charset.CharsetEncoderを利用する方法もあります。

  1. Javaのcontains()メソッド徹底解説:文字列に部分文字列が含まれるか判定する方法

    Javaのcontains()メソッドは、ある文字列の中に特定の部分文字列(サブストリング)が含まれているかどうかをチェックします。戻り値はtrueまたはfalseのどちらかで、引数として検索したい部分文字列を1つだけ受け取ります。 文字列操作でよくある課題 文字列を扱っていると、その文字列が特定の文字並びを含んでいるかどうかを確認したい場面が頻繁にあります。例えば、ユーザーの電話番号にアメリカの国コード(+1)が含まれているかをチェックするアプリを作る場合などが挙げられます。 Javaには、こうした判定を行うための組み込みメソッド「contains()」が用意されています。この記事

  2. Swiftで文字列が別の文字列を含んでいるか確認する方法

    Swiftである文字列に別の文字列が含まれているかどうかを確認するには、2つの異なる文字列が必要です。1つは検索対象となる文字列、もう1つはその中に特定の文字列が含まれているかを調べる元となる文字列です。 ここでは、確認したい文字列を「point」、全体の文字列を「TutorialsPoint」、そして別の文字列として「one two three」を使用して説明します。Playgroundでこれらの文字列を使って実際に確認してみましょう。 この確認は、以下に示す2つの方法で行うことができます。まずは3つの異なる文字列を作成します。 var completeStr1 = Tutorials po