Java快速输入输出使用详解(解决Java输入输出超时问题)

Java快速输入输出使用详解(解决Java输入输出超时问题)Java快速输入输出使用详解一、背景:  Scanner类输入时,输入效率比较慢,输入数据大于10^5左右时(你觉得数据有点多时就用快速输入即可),某些题目会超时。所以需要输入快一点的方法。  一般情况下输入数据多导致题目超时时,直接使用快速输入中的:1.简单方法即可。二、快速输入:1.简单方法(我常用的:只是加了个包装流BufferedReader)importjava.io.Bu…

大家好,又见面了,我是你们的朋友全栈君。



Java快速输入输出使用详解

一、背景:

  Scanner类输入时,虽然方式很简单,但是输入实在太慢了,经常遇到大的数据量时候就超时。(你觉得数据有点多时就用快速输入即可)

  某些题目用Scanner会超时。所以需要输入快一点的方法。所以写了这篇,不同方法的输入。

二、输入:

1.Scanner

最简单的方式,不过比较慢。

import java.util.Scanner;

public class ScannerInput { 
   
	public static void main(String[] args) { 
   
		Scanner s = new Scanner(System.in);
		String str1 = s.next(); // 输入一个字符串,空格或回车换行时就不继续读了
		String line = s.nextLine(); // 输入一行字符串 
		int num = s.nextInt(); // 输入一个整数
		double num2 = s.nextDouble(); // 输入一个小数
	}
}

2.BufferedReader

我常用的,最简单方式。也叫缓冲流或包装流

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderInput { 
   
	public static void main(String[] args) throws IOException { 
   
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // 输入
		String line = in.readLine(); // 输入的一行字符
		System.out.println(line);
	}
}

3.StreamTokenizer

这种方式需要处理一个异常,try的话代码太多了,直接抛出就好。

主要用于分词。

注意:StreamTokenizer只能接收数字或字母,如果输入除空格和回车以外的字符
(如:~!@#$%^&*()_+{}:<>?)无法识别,会显示null。

同时,如果该输入字符串时却输入数字会显示null,该输入数字时输入字符串也会显示null

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class StreamTokenizerInput { 
   
	public static void main(String[] args) throws IOException { 
   
		// Input(); // 输入字符串和数字
		// LoopInputString(); // 循环输入字符串
		LoopInputDouble(); // 循环输入数字
	}

	/** 输入字符串和数字 */
	public static void Input() throws IOException { 
   
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

		in.nextToken(); // 解析下一个标记。每次调用sval或nval时候都需要调用一下
		String str = in.sval; // 输入字符串
		System.out.println(str);

		in.nextToken(); // 解析下一个标记。每次调用sval或nval时候都需要调用一下
		double num = in.nval; // 输入数字
		System.out.println(num);
	}
	
	/** 循环输入字符串 */
	public static void LoopInputString() throws IOException { 
   
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		while (in.nextToken() != StreamTokenizer.TT_EOL) { 
    // 当下一个输入不是行末尾时
			String str = in.sval; // 输入字符串
			System.out.println(str);
		}
	}
	
	/** 循环输入数字 */
	public static void LoopInputDouble() throws IOException { 
   
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		while (in.nextToken() != StreamTokenizer.TT_EOL) { 
    // 当下一个输入不是行末尾时
			double num = in.nval; // 输入数字
			System.out.println(num);
		}
	}
}

4.StringTokenizer

参考《算法竞赛入门经典训练指南》中刘老师推荐的输入方法

主要用于分词。


/** 快速输入类 */
class Reader { 
   
    static BufferedReader reader;
    static StringTokenizer tokenizer;

    /** 调用这个方法来初始化reader,即InputStream*/
    static void init(InputStream input) { 
   
        reader = new BufferedReader(new InputStreamReader(input));
        tokenizer = new StringTokenizer("");
    }

    /** 获取下一段文本 */
    static String next() throws IOException { 
   
        while ( ! tokenizer.hasMoreTokens() ) { 
   
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    static int nextInt() throws IOException { 
   
        return Integer.parseInt( next() );
    }
	
    static double nextDouble() throws IOException { 
   
        return Double.parseDouble( next() );
    }
}

当然,你也可以粘贴下面这个,这样你就不需要再调用 init() 方法了。

我比较 推荐 使用这个,粘贴到需要用的类的里面,作为内部类。

    /** 快速输入类 */
    static class Reader { 
   
        static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer tokenizer = new StringTokenizer("");
        /** 获取下一段文本 */
        static String next() throws IOException { 
   
            while ( ! tokenizer.hasMoreTokens() ) { 
   
                tokenizer = new StringTokenizer(reader.readLine());
            }
            return tokenizer.nextToken();
        }
        static int nextInt() throws IOException { 
   
            return Integer.parseInt( next() );
        }
        static double nextDouble() throws IOException { 
   
            return Double.parseDouble( next() );
        }
    }

三、 输出

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class PrintWriterOutput { 
   
	public static void main(String[] args) throws IOException { 
   
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		String str = "这里是要输出的内容!";
		out.print(str); // 输出后不换行
		out.println(str); // 输出后换行
		out.printf("%s", str); // 格数化输出
		out.flush(); // 记得刷新一下在控制台输出
	}
}

四、常用整合

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class InputOutput { 
   
	public static void main(String[] args) throws IOException { 
   
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
		PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
		String line = in.readLine(); // 输入一行字符
		out.println(line); // 输出并换行
		out.flush(); // 在控制台输出,不要忘记这句!
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141405.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 墙裂推荐9个在线图片压缩网站[通俗易懂]

    墙裂推荐9个在线图片压缩网站[通俗易懂]转载自:https://www.zcool.com.cn/article/ZNTQzNDYw.html?switchPage=on1.Tinypng网址:https://tinypng.com/Tinypng可以说是很受大家欢迎的一个图片压缩站点,不管对于前端工程师或者设计师来说都是一个不错的图片压缩工具。Tinypng的操作方式也十分的简单,上传、压缩、下载,流程十分的简单,网站不仅仅支…

    2022年6月18日
    31
  • sqlserver数据库置疑修复语句_sql2008数据库可疑解决方法

    sqlserver数据库置疑修复语句_sql2008数据库可疑解决方法SQL数据库修复的三大核心技术:1、磁盘阵列分析重组技术;2、数据库恢复与修复技术;3、SCSI盘物理故障开盘技术。至今已经成功恢复数百台服务器的SQL数据库,用户覆盖全国。导致SQL数据库丢失的原因:1、各种原因:误删除、误格式化、断电等造成的MSSQLSERVER数据库文件破坏。2、MSSQLSERVER数据库丢失了*.ldf文件,只有一个*.MDF文件,将是非

    2022年8月20日
    25
  • HTML制作网页_手机制作html网页

    HTML制作网页_手机制作html网页一、步骤1、HTML1、新建文本文档2、改后缀名.html3、以记事本方式打开并编写代码4、保存,关闭后,直接双击打开网页

    2022年9月23日
    0
  • 2、dubbo从入门到放弃 dubbo-admin 2.6.x以后的管控台打包[通俗易懂]

    2、dubbo从入门到放弃 dubbo-admin 2.6.x以后的管控台打包[通俗易懂]2、dubbo从入门到放弃 dubbo-admin 2.6.x以后的管控台打包

    2022年4月20日
    106
  • kalilinux更换源(pip3换源)

    文件位置:/etc/apt/soucrce.list注释kali原来的源,下面添加任意一个源即可#kali官方源debhttp://http.kali.org/motomainnon-freecontribdeb-srchttp://http.kali.org/motomainnon-freecontribdebhttp://security.kali.org/moto/updatesmaincontribnon-freedeb-srchttp://

    2022年4月10日
    293
  • 如何实现微信上制作活动链接「建议收藏」

    如何实现微信上制作活动链接「建议收藏」随着互联网的快速发展,无论是房产、装修检查、家居、家店还是商城、餐饮等行业,商家们都会用到活动预约报名,线上活动链接的制作不仅成本低,而且受众也广,可以达到快速宣传的效果。相信很多小伙伴们在微信朋友圈看到的微信活动报名链接很好奇,这种活动链接是如何实现的,希望自己也可以在微信上制作这种活动链接。    工预善其事必先利其器,在这里,咱不能不提到一个非常好用的微信活动制作神器—获客宝。这款软件的神奇之处在于,他不仅可以帮你在微信上制作活动页面,而且还可以帮你侦查到谁偷偷浏览了你的页面(悄悄来,又悄悄走,不

    2022年9月18日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号