快读快写模板
概述
Java的Scanner类是基于正则表达式匹配的,所以读写效率是极低的,本质上是基于Scanner类对于不同输入数据类型的匹配的问题。其地位约等于C++中的cin
而在竞赛中考虑到输入输出的数据类型都是固定的,我们可以通过一些其他的IO库来实现更高效率的读写方式
StringTokenizer类
StringTokenizer可以将输入的字符串按照指定的分割符将其切分为多个子字符串,将每个子字符串称为token
构造方法
1 | //解析输入的字符串,以\t \n \r \f为分隔符 |
成员方法
1 | //获取下一个token子字符串 |
自行实现数据类型的解析
1 | public class ExtendedStringTokenizer extends StringTokenizer { |
InputStream和Reader
- 我们可以通过
new InputStreamReader(System.in)
和BufferedReader来解析一个System.in的InputStream - 也可以通过
new DataInputStream(System.in)
和StringTokenizer来解析
一次性读入
1 | DataInputStream stream = new DataInputStream(inputStream); |
逐行读入
逐行读入的效率是低于一次性读入的
不过对于reader而言,提供了更多解析的方式
1 | BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); |
除了readLine以外,reader还支持其他的读入方式
1 | //读入一个字符 |
Comments