java快读使用快速简单总结 | StreamTokenizer快读简单使用| PrintWriter快写简单使用

文章讲述了在Java编程中,当处理大量数据时,如何从使用Scanner转向StreamTokenizer进行快读,以提高效率。同时介绍了BufferedReader用于读取整行字符串以及PrintWriter进行快写的方法,强调了在使用PrintWriter时必须调用flush()来确保输出。

笔试IO,事情起因

昨天参加某为的笔试,被一个输入卡死了;使用了Scanner输入,本地运行正确,结果一提交就出现CPU超时错误;当时没有注意到是Scanner的问题,一直解决不了,最终含恨而归…

在绝大多数时候,我们读入数据都是用Scanner类读入,简单快捷,但当数据比较大的时候读取很慢!所以需要使用快读。我们快读主要是使用io包的StreamTokenizer类。当读取数据的数量级达到10^3时,就很需要考虑使用StreamTokenizer类了,真的快很多。

下面开始总结使用的方法:

StreamTokenizer类快读:

每次读之前调用nextToken(),以空格分割;然后通过常量值获取数据。

		StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in)); 
		st.nextToken();
		String str = st.sval;//读取String类型数据
		st.nextToken();
		double num1 =  st.nval;//读取double类型数据
		st.nextToken();
		int num2 = (int)st.nval;//读取int类型数据
		st.nextToken();
		long num3 = (long)st.nval;//读取long类型数据

如果只需要读取一行字符串,只需要使用BufferedReader : 以行为分割;

BufferedReader re = new BufferedReader(new InputStreamReader(System.in)); 	
String x = re.readLine();
PrintWriter类快写:

PrintWriter类的使用相对而言比较简单,就是把我们平时的输出的System.out替换成对应的快输出的实例对象名,但是需要特别注意: 最后记得flush(),否则无法正常输出

		PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
		pw.print();//不换行输出
		pw.println();//换行输出
		pw.printf();//格式化输出
		pw.flush();//关闭输出流
使用测试:
  //快读快写测试
  public static void main(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String a = bf.readLine(); //只用于读取一行字符串
    StreamTokenizer st = new StreamTokenizer(new InputStreamReader(System.in));
    String b = bf.readLine();
    st.nextToken();
    String c = st.sval;
    st.nextToken();
    int d = (int)st.nval;
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
    pw.println(a +" "+ b +" "+ c +" "+d);
    pw.println(22);
    pw.flush();//关闭输出流
    System.out.println( a +" "+ b +" "+ c +" "+d);
  }

输入输出

//输入
qq
ww
tt
22
//输出
qq ww tt 22
22
qq ww tt 22
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值