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

【Java】正規表現を使って文字列から数値を抽出する方法をわかりやすく解説

Javaで文字列に含まれる数値(数字の並び)を抽出したい場合、正規表現を使うのが最も簡単な方法です。文字列から数値にマッチさせるには、以下のいずれかの正規表現パターンを使用します。

"\\d+"
または
"([0-9]+)"

\\d+」は1桁以上の連続した数字にマッチするパターンで、「([0-9]+)」は0〜9の数字が1回以上繰り返される部分にマッチします。どちらを使っても結果は同じになります。

抽出処理では、java.util.regexパッケージのPatternクラスMatcherクラスを使用します。Patternクラスで正規表現をコンパイルし、Matcherクラスのfind()メソッドでマッチする箇所を順番に検索していくのが基本的な流れです。

例1:ユーザー入力された文字列から数値を抽出する

Scannerクラスを使ってキーボードから入力された文字列から、数値部分だけを抜き出すサンプルコードです。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExtractingDigits {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("サンプルテキストを入力してください: ");
        String data = sc.nextLine();

        // 文字列内の数字にマッチする正規表現
        String regex = "\\d+";

        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);

        // Matcherオブジェクトを作成
        Matcher matcher = pattern.matcher(data);

        System.out.println("抽出された数値: ");
        while (matcher.find()) {
            System.out.print(matcher.group() + " ");
        }
    }
}

実行結果

サンプルテキストを入力してください:
this is a sample 23 text 46 with 11223 numbers in it
抽出された数値:
23 46 11223

この例では、文章の中に含まれる「23」「46」「11223」という3つの数値がすべて抽出されています。find()メソッドはマッチする部分がなくなるまで繰り返し呼び出せるため、whileループと組み合わせることで文字列中のすべての数値を取得できます。

例2:プログラム内の固定文字列から数値を抽出する

次に、あらかじめ用意した文字列から数値を抽出する例です。こちらでは「([0-9]+)」というパターンを使用しています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Just {
    public static void main(String[] args) {
        String data = "abc12def334hjdsk7438dbds3y388";

        // 数字にマッチする正規表現
        String regex = "([0-9]+)";

        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);

        // Matcherオブジェクトを作成
        Matcher matcher = pattern.matcher(data);

        System.out.println("抽出された数値: ");
        while (matcher.find()) {
            System.out.print(matcher.group() + " ");
        }
    }
}

実行結果

抽出された数値:
12 334 7438 3 388

英字と数字が混在した文字列からも、「12」「334」「7438」「3」「388」という5つの数値が正しく抽出されました。マッチした文字列はmatcher.group()メソッドで取得できます。

まとめ

  • 文字列から数値を抽出するには「\\d+」または「([0-9]+)」の正規表現を使用する
  • Pattern.compile()で正規表現をコンパイルし、pattern.matcher()でMatcherオブジェクトを生成する
  • find()メソッドをwhileループで回すことで、文字列中のすべての数値を順に取得できる
  • マッチした数値はgroup()メソッドで取り出せる

この手法はログファイルの解析やデータの前処理など、さまざまな場面で活用できるので、ぜひ覚えておきましょう。

  1. Pythonで文字列から数字を抽出する方法【isdigitと正規表現の使い分け】

    正の整数だけを抽出するシンプルな方法文字列に含まれる正の整数だけを取り出したい場合は、split()で空白ごとに文字列を分割し、isdigit()で各要素が数字のみで構成されているかを判定する方法が手軽です。>>> s = h3110 23 cat 444.4 rabbit 11 2 dog >>> [int(x) for x in s.split() if x.isdigit()] [23, 11, 2]この方法では、すべてが数字で構成された要素だけが整数に変換されてリストに追加されます。そのため「h3110」のように文字と数字が混ざった語句や、「444.

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp