获取输入信息可以使用 Scanner 对象,只需 new Scanner(System.in); 调用方法即可,代码也更简便。
既然Scanner更简便,为什么还需要IO获取控制台输入
- IO比Scanner更快 ,至于为什么更快参考文章 (菜鸡不懂)
- 那更快又能干嘛,当然是竞赛,刷题了。
- 只需要获取少量数据时,直接使用Scanner也无伤大雅,而需要或取大量数据时即可用IO了
这里附上:大佬代码
需要追求极致,拿竞赛第一 建议看上面大佬代码,下面代码仅供参考
需要获取到含空格数据(一行数据)时
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String string = in.readLine();//readLine() 读取一行数据
in.close();
}
}
按分隔符(含空格)分割的数据
import java.io.*;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
new Main().one();
}
private void one() {
InputReader in = new InputReader(System.in);//InputReader类型是下面的内部类
String str = in.next();
int a = in.nextInt();
double b = in.nextDouble();
//题外话
//当是需要输出多组数据时,可使用PrintWriter ,将输出内容使用print()、println()、printf()存入
//关闭流close() 或刷新flush() 可将内容输出
PrintWriter out = new PrintWriter(System.out);
out.println(str);//打印内容并终止该行
out.print(a);//打印内容
out.printf("%.1f",b); //使用指定格式字符串和参数将格式化的字符串写入此 writer 的便捷方法。
out.flush();//刷新该流的缓冲。
// out.close();//关闭该流并释放与之关联的所有系统资源。
}
class InputReader{//内部类
BufferedReader reader;
StringTokenizer token;//StringTokenizer 字符串分隔解析类型
//java默认分隔符为 空格 制表符"\t" 换行符"\n" 回车符"\r"
public InputReader(InputStream in) {
this.reader = new BufferedReader(new InputStreamReader(in));
}
String next() {//返回字符串的方法
while(token==null || !token.hasMoreTokens()) {//hasMoreTokens() 返回是否还有分隔符
try {
token = new StringTokenizer(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return token.nextToken();//nextToken() 返回当前位置到下一个分隔符之间的字符串
}
//按需要获取数据类型可通过相关方法对String进行转换,举例:
int nextInt() {return Integer.parseInt(next());}//返回一个int
long nextLong() {return Long.parseLong(next());}
double nextDouble() {return Double.parseDouble(next());}
char nextChar() {return next().charAt(0);}
boolean nextBoolean() {return Boolean.parseBoolean(next());}
BigInteger nextBigInteger() {return new BigInteger(next());}
//...
}
}