paizaでの標準入力(Java)

paizaやCodeIQなどでプログラミングの練習をしようと思ったとき
標準入力のサンプルコードを見てもチンプンカンプンでつまずいたのでまとめておきます。

基礎編

1.Scanner

一番簡単だと思います。
ただし遅いらしい。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();  //文字列の入力受付
        System.out.println(line);
    }
}

注意しなければならないのは、String型の場合の入力はnextLine()を使うのに対して
int型の場合はnextInt()を使うこと。

2.BufferedReader

paizaのサンプルコードで使われてたやつ。
いまいちよく解ってないです。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferdReader br = new BufferedReader(new inputStreamReader(System.in));
        String line = br.readLine();     //文字列の入力受付
        System.out.println(line);
    }
}

InputStreamReaderのReadメソッドでは一文字毎にしか読み込めずに非効率なので
BufferedReaderをInputStreamReaderでラップすることで一列にまとめて読み込むと
効率が良くなるらしい。

初学者の僕はnewの中でnewをしているのが気持ち悪くて
受け付けなかったんですが、リファレンスやら見てるうちに
解ったような解らないような...
こっちの方がScannerを使うよりも速いらしいです。

(少し)応用編

- 入力されたString型をsplitで分割する

paizaでの入力は大体"1 1"やら"1,1"などの形で行われます。
そこで空白やカンマで区切って分割したり
int型に変換したりしなければいけません。

public class Main {
    public static void main(String[] args) {
        String str = ("1,2,3");
        String[] array = str.split(",");
        for(int i : array) {
            System.out.println(i);
        }
    }
}

splitを使うことで、空白やカンマで区切られた文字列を分割して配列に格納
することができます。

- 分割した文字列をint型に変換する

ところがこのままだとString型のままなので計算に使うことができず
ifやforで使いたいときに困ります。
そこでさらにint型に変換します。

public class Main {
    Public static void main(String[] args) {
        String str1 = "1";
        String str2 = "2";
        int a = Integer.parseInt(str1);
        int b = Integer.parseInt(str2);
        System.out.println(a+b);
    }
}

これでやっと入力された文字列を数字として扱うことができるようになりました。
Scannerを使うときはInteger.parseInt()をInteger.parseInt(Scanner.next())に
すると入力と置き換えが一発でできて効率的らしいです。