【Java】Scannerクラスを使って文字列(String)を分割し、プリミティブ型のデータへ変換する!
Scannerクラスを使うことで文字列をプリミティブ型のデータへ変換することができます。
プリミティブ型とは、プログラミング言語などが仕様として提供する基本的なデータ型であり、byte型、short型、int型、long型、float型、double型、boolean型、char型があります。
今回はScannerクラスを使って、以下の場合で文字列をプリミティブ型のデータへ変換していきます。
⚫︎ 文字で文字列を分割してプリミティブ型のデータへ変換する場合
⚫︎ 正規表現で文字列を分割してプリミティブ型のデータへ変換する場合
目次
Scannerクラスとは
Scannerクラスとは標準入力を取得するためのクラスとなります。
Scannerクラスの書き方
Scannerクラスの構文は下記となります。
1 |
import java.util.Scanner; |
Scannerクラスを使用できるようにパッケージをインポートします。
そうすることでScannerクラスのメソッドを使用できるようになります。
Scannerクラスについて詳しく知りたい場合はこちらをご参考ください
文字列を分割するメソッド
Scannerクラスで文字列を分割するにはuseDelimiter()メソッドを使用します。
useDelimiter()メソッドの書き方は下記となります。
1 2 |
Scanner scanner = new Scanner(System.in); scanner.useDelimiter("文字"); |
useDelimiter()の()に文字を指定することで指定した文字で文字列を区切ることができます。
文字列を分割し、プリミティブ型へ変換するサンプルコード
文字列を分割し、プリミティブ型のデータ変換するサンプルコードを紹介します。
今回は文字と正規表現で文字列を分割し、プリミティブ型のデータへ変換してみます。
文字で文字列を分割する場合
文字で文字列を分割し、プリミティブ型のデータへ変換します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// 文字列を分割し、リミティブ型のデータへ変換する import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { // Initialize Scanner object Scanner scan = new Scanner("12/56/22"); //Initialize the string delimiter scan.useDelimiter("/"); //Printing the tokenized Strings int sum = 0; while(scan.hasNextInt()){ sum += scan.nextInt(); } System.out.println(sum); } } |
出力結果
90
文字で文字列を分割し、int型のデータへ変換しました。
正規表現で文字列を分割する場合
正規表現で文字列を分割し、プリミティブ型のデータへ変換します。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// 文字列を分割し、リミティブ型のデータへ変換する import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { // 処理対象文字列 String target = "太郎:国語72点 算数48点 理科82点 社会50点"; // 「数字以外の文字」を区切り文字にする Scanner scan = new Scanner(target).useDelimiter("[^0-9]+"); int cnt = 0; // 数字の数 int sum = 0; // 合計値 // 現れた数字の合計とその回数を計上 while (scan.hasNextInt()) { sum += scan.nextInt(); cnt++; } System.out.println("合計点:" + sum + "点"); System.out.println("平均点:" + (sum / cnt + "点")); } } |
出力結果
合計点:252点
平均点:63点
正規表現で文字列を分割し、int型のデータへ変換しました。
今回のポイント
Scannerで文字列をプリミティブ型のデータへ変換
文字列を分割してプリミティブ型のデータへ変換するには 「Scanner」クラスを使用する
⚫︎ 文字を指定して文字列を区切ることで数字を取得しているパターンと、文字列を「数字以外の文字列」で区切ることで文字列中の数字のみを取得している
(数字以外の文字列は正規表現の「[^0-9]+」という形で指定しており、デフォルトでは空白が区切り文字として使用している)
⚫︎ ScannerクラスのnextIntメソッドで数値のInt型として取得する
(他にも文字列として取得したい場合はnextLineメソッド、「BigInteger」インスタンスで取得したい場合はnextBigIntegerメソッドなどが用意されている)
⚫︎ hasNextIntメソッドやnextIntメソッドで次の要素があるかないかを調べることができる
⚫︎ 区切り文字を適切に設定しないと、正しく値を取得できない。
(区切り文字を空白にした場合、要素は「太郎:「国語72点」「算数48点」となるため、nextIntメソッドでは1度も値を取得できない(nextメソッドなら取得可能)
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。