Java快读

java的快读

(1)BufferedReader

java 复制代码
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//定义对象
    String[] strings = br.readLine().split(" ");//读取一行字符串,以空格为分隔转化为字符串数组
    int n = Integer.parseInt(strings[0]);//读取整数,字符串转化为Integer类型数字
    long m = Long.parseLong(strings[1]); //读取整数,字符串转化为Long类型数字
    System.out.println(n + " "+m);
    strings = br.readLine().split(" ");
    System.out.println(strings[0]);//读取字符串

(2)StreamTokenizer

该类的使用较为麻烦,可以封装为一个对象,减低代码量。他比BufferedReader快,但是对于读取字符类型的操作,只能读取26字母,特殊符号和数字无法读取,有其局限性。

java 复制代码
public class Main{
	static class Read{
		StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		public int nextInt() throws Exception{
			st.nextToken();
			return (int)st.nval;
		}
        public String readLine() throws Exception{	//有局限,慎用
		st.nextToken();
		return st.sval;
	}
	}
public static void main(String[] args) throws Exception {
    Read read = new Read();
    int n = read.nextInt();
    System.out.println(n);
}
}

StreamTokenizer常见错误

(1)StreamTokenizer读入long类型的数字时会出现错误,因为nval的类型是double,在转换为long类型的过程中,由于double的精度问题,当long类型读入太大的数字时会出错。double类型能表示的数字范围比long大,但是是以牺牲精度的方式获得更大的存储,而他能精确保存的数字位数为十进制的15或16位,要比long小。

java 复制代码
public class 快读{
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static StreamTokenizer sr = new StreamTokenizer(in);
	static long ans = 0;
	public static void main(String[] args) throws IOException {
		long n = nextLong();
		System.out.println(n);
	}
	static long nextLong() throws IOException {
		sr.nextToken();
		System.out.println(sr.nval);
		return (long) sr.nval;
	}
}

由图可以看见,double类型在存储时,牺牲了精度,导致结果不准确。

(2)StreamTokenizer读入太长的字符串时也会有问题

相关推荐
卷无止境7 分钟前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境14 分钟前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12317 分钟前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102161 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb001 小时前
一个项目带你入门AI应用开发01
python
0566461 小时前
Python康复训练——常用标准库
开发语言·python·学习
极光代码工作室2 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
昆曲之源_娄江河畔2 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
土豆.exe2 小时前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法
Leighteen2 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言