{Java} paizaでの標準入力の受け取り方

paizaで与えられる文字列をどうやって使えばいいかわからん人用。

この記事の目次
・基本的な受け取り方
・複数行入力される時
・スペース区切りで入力される時

基本的な受け取り方

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
System.out.println("XXXXXX");

とりあえず言語でJavaを選んだらこんなコードが出てくる。
この sc.nextLine() が標準入力を受け取る合図みたいなもの。
(詳しくは省略するけど、Scannerをscで初期化してるので、sc.nextLine()になってるぐらいに思っといて)
仮に標準入力で与えられるのが "hoge" だった場合、

String x = sc.nextLine(); // xに"hoge"が代入される
System.out.println(x); // "hoge"

となる。終わり。

複数行入力されるとき。

問題によって入力が複数回行われる時がある。

入力される値
入力は以下のフォーマットで与えられます。
c_1
c_2
入力は 2 行となり末尾に改行が入ります。

一例としてはこんな感じで書かれていることが多い。

これは単純に1回目のsc.nextLine()では1行目
2回目のsc.nextLine()では2行目が受け取られる

仮に2行入力され、1行目が"one"、2行目が"two"だった場合、

String x = sc.nextLine(); // xに"one"が代入される
String y = sc.nextLine(); // yに"two"が代入される
System.out.println(x); // "one"
System.out.println(y); // "two"

となる。要は入力される回数だけreadLine()!を繰り返せばいい。

つまり3回入力されるなら

String[] strs = new String[3]; // 標準入力を受け取る用の空の配列を定義
for (int i = 0; i < 3; i++) { // 3回ループさせ、
    strs[i] = sc.nextLine(); // i番目に1つづつ受け取っていく
}

て感じでループ内で取得して配列に格納することもできる。
ただ受け取る入力がそれぞれ違った種類の情報のときは

String time = sc.nextLine(); // 15
String place = sc.nextLine(); // "cafe"
String occasion = sc.nextLine(); // "hungry"

と、一つずつ変数に入れるべきだと思う。

スペース区切りで入力されるとき。

一行で値を複数入力してくる問題もある。

入力される値
入力は以下のフォーマットで与えられます。
c_1 h_1
1 行目には文字列Aと文字列Bが半角スペース区切りで与えられます。

こんな感じで。 仮に"Tanaka" "Suzuki"の二つの文字列が与えられる場合、

String x = sc.nextLine(); // xに"Tanaka Suzuki"が代入される
System.out.println(x); // "Tanaka Suzuki"

となる。単純に1つの文字列として入力されるが、大抵"Tanaka"と"Suzuki"は別々に使いたいと思う。そんな時は

String[] strArray = sc.nextLine().split(" "); // " "がある所で区切って格納する

System.out.println(strArray[0]); // "Tanaka"
System.out.println(strArray[1]); // "Suzuki"

sc.nextLine();の後に .split(" ") を足せば解決できる。
カッコ内に " " のように半角スペースを指定すれば、半角スペースをその区切りとして認識して、区切りごとに配列の要素として順に格納される。

ただ大抵扱うのは数値なので、初めからint型にキャストしてやりたい。

int[] intArray = Arrays.stream(sc.nextLine().split(" ")) //" "で区切ってString配列へ
    .mapToInt(Integer::parseInt) //数値にして
    .toArray(); //配列へ

String型で受け取っておいてintに変換してもいいけど、確実に数値が入ってくるなら、受け取る→配列型にする→型変換するを一気にやっちゃえる。
※わかりやすいように行を分けてるけど、一行で書けるからね。