ACM中Java输入输出
ACM中Java输入输出
最初写算法时,是用Scanner的。因为当时接触的测试数据基本都是以算法的复杂度为主,但是后面遇到大量的输入数据时。发现Scanner远远不能满足条件。下面列出几种常用的输入输出方式。(输出统一用printwriter,系统的system.out太慢,结尾要释放缓存才能输出,不然数据放在缓存中输不出来)
1. Scanner
Scanner 这个类最慢,但是最好用,因为这个类没有缓存处理,所以io方面大量输入读取特别慢。
Scanner sc=new Scanner(System.in);
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
2. bufferedreader
bufferedreader这个类最不方便,但是可以满足大部分输入速度的需求,输入缺点就是只能按行读取数据,必要时需要字符串分割,转成int以及其他类型还需要转换。
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
这种输入方式只能输入字符串然后分割处理等等,效率比Scanner高很多
3. StreamTokenizer
StreamTokenizer这个类最快,相对第二种也好用很多,他的底层是用字符分割用,但是这样处理有很大局限性。输入string类型除了纯字母。否则混合输入会出错,特殊符号在字符串中输入也不行。
StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();int n=(int)in.nval;
in.nextToken();long p=(long)in.nval;
in.nextToken();double q=in.nval;
out.print(n);
out.flush();
这种输入方式效率最高,巨大的输入量也能快速处理。
其中bufferedreader最难用,Scanner最好用,但是streamtokenizer最快,刚开始可能用的不习惯,但是习惯就好了,毕竟这个影响太大了,至于输出。系统输出太慢。大量数据还会超时。
以上的转载请注明出处:https://javaforall.cn/144966.html
下面放上关于StreamTokenizer的例子:
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StreamTokenizer;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer tokenizer = new StreamTokenizer(new InputStreamReader(System.in));
tokenizer.nextToken();
System.out.println(tokenizer.sval);
}
}
输出:
E:\Java_DownLoad\jdk-19_windows-x64_bin\jdk-19.0.2\bin\java.exe "-javaagent:E:\Java_DownLoad\IntelliJ IDEA 2023.1.1\lib\idea_rt.jar=56485:E:\Java_DownLoad\IntelliJ IDEA 2023.1.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\HP\Desktop\Ctest\test\redis_study\untitled\target\classes org.example.Main
1034254
null
Process finished with exit code 0
当输入的字符串为数字时,该串不会被读取。查阅资料后得知sval读取的是被定界符所包围的单词,单词是由一个单词要素后面跟着0个或者更多个单词要素或者数字要素组成的,而数字不是单词要素,例如,添加单词要素后:
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StreamTokenizer;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
StreamTokenizer tokenizer = new StreamTokenizer(new InputStreamReader(System.in));
tokenizer.ordinaryChars('0','9');
tokenizer.wordChars('0', '9');
tokenizer.nextToken();
System.out.println(tokenizer.sval);
}
}
输出
E:\Java_DownLoad\jdk-19_windows-x64_bin\jdk-19.0.2\bin\java.exe "-javaagent:E:\Java_DownLoad\IntelliJ IDEA 2023.1.1\lib\idea_rt.jar=56311:E:\Java_DownLoad\IntelliJ IDEA 2023.1.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\HP\Desktop\Ctest\test\redis_study\untitled\target\classes org.example.Main
1028534
1028534
Process finished with exit code 0
原文地址:https://blog.csdn.net/weixin_46225503/article/details/136706071
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!