利用Scanner类进行输入时正常情况下都是是够用。不过当输入量和输出量太大的时候(达到百万到千万),那么这种输入方式效率就很低。
这时候可以用StreamTokenizer类来输入基本数据类型,如int,double,float boolean short long byte(只能这七种,其他不行,例如char,String)用法如下:
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException
{
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
double a, b;
while(in.nextToken() != StreamTokenizer.TT_EOF)
{
a = (double)in.nval;
in.nextToken();
b = (double)in.nval;
System.out.println("a + b = "+(a+b));
}
}
}
其中in.nextToken()代表输入,遇到空格键,Enter键,Tab键结束一次输入。(XXX)in.nval是将输入的数据转化成自己想要的数据类型(没输入一次转化一次)。
例如杭电OJ的超级赛亚ACMer,采用StreamTokenizer来输入,用Scanner会超时!!
package com.xuan.main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
public class 超级赛亚ACMer {
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
long m,t,k;
int n;
in.nextToken();
t=(int)in.nval;
for(int i=0;i<t;i++) {
int temp=0;
in.nextToken();
n=(int)in.nval;
in.nextToken();
m=(long)in.nval;
in.nextToken();
k=(long)in.nval;
long [] a=new long[n];
for(int j=0;j<n;j++) {
in.nextToken();
a[j]=(long)in.nval;
}
Arrays.sort(a);
if(m>a[n-1]) {
System.out.println("Case #"+(i+1)+":");
System.out.println("why am I so diao?");
}
else if(m<a[0]) {
System.out.println("Case #"+(i+1)+":");
System.out.println("madan!");
}
else {
for(int j=0;j<n;j++) {
if(m==a[j]) {
temp=j;
break;
}
else if(m<a[j]) {
temp=j-1;
break;
}
}
for(int j=temp;j<n-1;j++) {
if(a[j+1]-a[j]>k) {
System.out.println("Case #"+(i+1)+":");
System.out.println("madan!");
break;
}
else {
k--;
if(j==n-2) {
System.out.println("Case #"+(i+1)+":");
System.out.println("why am I so diao?");
}
}
}
}
}
}
}
用BuferrReader类(缓冲流)来输入的readLine()方法来输入字符串。当需要输入字符串次数超过1000次时,就应该用这个类输入,性能比Scanner类提升15ms左右。这个类主要有两个方法:read readLine.
readLine():输入一行的字符串,结束符为enter键。
read():返回从键盘输入的字符的SCAll值。(切记空格键,enter键也算字符)。
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class tuyiry {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
System.out.println(s);
}
}