Java - 文字列(String)で数字(int)のみを抽出する方法

文字列(String)で数字(int)のみを抽出する方法いくつかの方法があります。

  • 正規表現を使用して、数字ボタン
  • for文で数追加
  • Streamを利用して、数の追加

最も簡単な方法は、正規表現(Regex)を利用する方法です。 上記の方法を例とともに説明します。

正規表現でInteger抽出

次のコードは、正規表現でIntegerのみを抽出するためのコードです。 replaceAll()の引数として正規表現と変換する文字列を渡します。

String str = "aaa1234, ^&*2233pp";
String intStr = str.replaceAll("[^0-9]", "");
System.out.println(intStr);
// output: 12342233

"[^0-9]"は0〜9の数字ではなく、文字列を意味します。

したがって、数字以外の文字を空白( "")に変更するようにという意味です。

次のコードも、上記と同じ結果を出力します。 "^\\d""[^0-9]"の短縮形で意味は同じです。

String str = "aaa1234, ^&*2233pp";
String intStr = str.replaceAll("[^\\d]", "");
System.out.println(intStr);
// output: 12342233

この方法が最もコードが短いので、この方法を使用することをお勧めします。

正規表現について詳しく知りたい場合は、Java - 正規表現(regex)の例を参照してください。

for文で数字を抽出

次のコードは、for文でIntegerのみを抽出するためのコードです。

String str = "aaa1234, ^&*2233pp";
String intStr = "";
for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (48 <= ch && ch <= 57) {
        intStr += ch;
    }
}
System.out.println(intStr);
// output: 12342233

48は、ASCIIで数字の0を意味し、57は、ASCIIで数9を意味します。 つまり、文字列で0〜9の数字のみを抽出するためのコードです。

Streamに数字を抽出

次のコードは、Streamに数字を抽出するためのコードです。 for文とアルゴリズムは同じです。代わりにforを使用せずにStreamを使用して処理しました。

String str = "aaa1234, ^&*2233pp";
IntStream stream = str.chars();
String intStr = stream.filter((ch)-> (48 <= ch && ch <= 57))
        .mapToObj(ch -> (char)ch)
        .map(Object::toString)
        .collect(Collectors.joining());
System.out.println(intStr);
// output: 12342233

参考

codechachaCopyright ©2019 codechacha