解决Java使用Scanner输入内存溢出?
在解决oj上面的问题时发现,使用Scanner老是Runtime Error,很烦,最后问了一下度娘,度娘告诉我:有一种方法可以替代Scanner输入!
BufferReader
package OJ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Cody
* @date 2020/7/7 - 11:24
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine();
String s1 = reader.readLine();
int n ;
n = Integer.parseInt(s1);
char[] str = new char[100005];
str = s.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = n; i < str.length; i++) {
sb.append(str[i]);
}
for(int i=0;i<n;i++){
sb.append(str[i]);
}
System.out.println(sb);
}
}
- java.io.BufferedReader类为了能够高效的读取字符串,从字符输入流和字符缓冲区读取文本
- Scanner类中nextLine()在形如nextXXX() {nextShort(), nextByte(), nextInt(), nextLong(), next(), nextDouble(), nextFloat() }之后使用,nextLine()方法不能从控制台读取任何内容,游标不会进入控制台,将会跳过这一部。
- BufferedReader不会出现这个问题。
- BufferedReader是支持同步的,Scanner不支持。若处理多线程程序,BufferedReader应该使用
- BufferedReader相对于Scanner有足够大的缓冲区内存
Scanner(1k),BufferedReader(8k) - BufferedReader相对于Scanner快,因为BufferedReader只是简单地读取字符序列。