对于解决该方法我们一般如下操作,不需要知道为什么,有模板(个人观点)
使用BufferedReader代替Scanner:Scanner类在读取大量输入时性能较差,而BufferedReader具有更高的读取速度。可以使用BufferedReader的readLine()方法逐行读取输入数据。
使用StringTokenizer:StringTokenizer是一个用于分割字符串的工具类,相比正则表达式或者String的split()方法,它具有更高的执行效率。可以使用StringTokenizer来分割输入数据。
目录
一、读取基本数据类型
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st=new StringTokenizer(br.readLine()); int n=Integer.parseInt(st.nextToken()); long m=Long.parseLong(st.nextToken()); System.out.print("n="+n+" m="+m); } }
二、String类型
(1)以回车为结束符
注意这个读取字符串是以回车结尾的,遇到空格也是会读进去的
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String s1=br.readLine(); String s2=br.readLine(); System.out.print("s1="+s1+" s2="+s2); } }
(2)以空格为结束符
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); String s1 = st.nextToken(); String s2 = st.nextToken(); System.out.println("s1=" + s1 + " s2=" + s2); } }