Java快速IO(ACM)必備
en....
無非用到的是
1. new Scanner(System.in);
2.new BUfferReader(new InputStreamReader(System.in);
3.System.in.read() //需要轉換
當然1,2這兩個還有許多坑要注意,比如說 next() 不會讀入null字元,就一直等待,nextline() 吸收\n到緩衝區 但是不會讀入,readLine 與read()也是一樣
這裡需要注意:in.nextInt() 接著 in.nextLine()會出現讀入空缺現象,很明顯,我前面說過,nextLine會吸收\n到緩衝區
貼程式碼:
package IO; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.StringTokenizer; /** * Class for buffered reading int and double values */ class Reader解決超時 { static BufferedReader reader; static StringTokenizer tokenizer; /** * call this method to initialize reader for InputStream */ static void init(InputStream input) { reader = new BufferedReader( new InputStreamReader(input)); tokenizer = new StringTokenizer(""); } /** * get next word */ static String next() throws IOException { while (!tokenizer.hasMoreTokens()) { //TODO add check for eof if necessary tokenizer = new StringTokenizer( reader.readLine()); } return tokenizer.nextToken(); } static String nextLine()throws IOException{ while(!tokenizer.hasMoreElements()){ tokenizer=new StringTokenizer( reader.readLine() ); } return tokenizer.nextToken("\n"); } static int nextInt() throws IOException { return Integer.parseInt(next()); } static double nextDouble() throws IOException { return Double.parseDouble(next()); } public static void main(String[] args) throws IOException{ init(System.in); StringTokenizer st = new StringTokenizer("this is a test"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } // System.out.println(next()); System.out.println(nextLine()); } }