変換方法を早く知りたい方は、ページ最後の結論にどうぞ。
背景
前回の続きで、またコーディングテストネタです。
[Java 8]コーディングテストで使えるアルファベット順、文字列長順のソート方法 - Qiita
当たり前ですが、コーディングテストでは「標準入力による値の取得」→「自分が処理しやすいように変換」→「なにかしらの計算処理」という流れが大半です。
「なにかしらの計算処理」に少しでも時間をかけるために、「標準入力による値の取得」と「自分が処理しやすいように変換」には時間をかけたくないものです。
今回は、タイトルの通り、標準入力をリストまたは配列に変換するまでの方法についてまとめます。
動作環境
- java 1.8.0_191
問題でよくある標準入力
問題でよくある標準入力は、下のようなイメージです。
1,あいうえお,かきくけこ
カンマ(,)区切りで文字を取得して、最初に入力された数字分だけ、後ろの文字を出力する的な問題だったとします。
上の例だと、最初の数字は1なので、出力は、
あいうえお
となるのが正解とします。
2,あいうえお,かきくけこ,さしすせそ
が標準入力の場合は、
あいうえお
かきくけこ
と出力されるのが正解とします。
このような場合、まず最初に文字列を読み込み、カンマ区切りでリストに格納したいと自分は思います。
標準入力の取得からListに変換するまで
まず、標準入力は下記のように取得します。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
Scannerによる取得方法をあるようのですが、自分はjava.io.BufferedReaderとjava.io.InputStreamReaderを使用するパターンを使用しています。
lineには、1行分の文字列が格納されています。
次に本題のカンマ(,)区切りでListに格納する処理をやってみます。
List<String> list = Arrays.asList(line.split(","));
簡単ですが、これだけです。
splitは、文字列を指定された正規表現に一致する位置で分割するものです。
これの返り値は、String[]です。文字列型の配列です。
正規表現で分割するため、カンマ(,)以外でも分割することができます。
次に、配列をリストに変換するjava.util.Arrays.asListメソッドを使用するという処理になります。
下記のようにメソッドとして独立させるのもありかもしれません。
/**
* String→Listに変換
* @param str 変換対象のString
* @return 変換したList
*/
private static List<String> stringToList(String line) {
return Arrays.asList(line.split(","));
}
問題でよくある標準入力の答え
自分が雑に考えた問題を解答すると、下のようなソースコードになります。
Listじゃなくて配列でいいじゃねーか!!とか
Listに変換する必要ないじゃねーか!!というツッコミはなしでお願いします………
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String line = br.readLine();
List<String> list = Arrays.asList(line.split(","));
int cnt = Integer.parseInt(list.get(0));
for (int i = 1; i <= cnt; i++) {
System.out.println(list.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
結論
Listならば、
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
List<String> list = Arrays.asList(line.split(","));
配列ならば、
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
String[] strArray = line.split(",");