Lectura rápida de Java y salida rápida

Como todos sabemos, la lectura de la clase Java Scanner es realmente lenta.
Cuando usamos la clase Scanner para leer datos, una vez que los datos exceden los 10,000, aparecerá muy lento
. La clase StreamTokenizer es casi 300 ms más rápida que Scanner.
¡Aunque esta vez se siente muy corto! ! Pero en la implementación del algoritmo, 300 ms ya es un número muy grande, y es muy probable que nos haga sentir lo que es TLE TTTTTT

Así que aquí sugiero que el uso de Java para leer cuando los datos es relativamente grande, podemos utilizar la clase StreamTokenizer
se describe a continuación el uso de
(1) que lo usamos, queremos importar io paquete, que io clases del paquete
(2) en Cuando se usa esta clase, la función debe arrojar IOException
(3) StreamTokenizer re = new StreamTokenizer (nuevo BufferedReader (nuevo InputStreamReader (System.in))); Esta es su implementación específica

Hay un método en la clase StreamTokenizer que es nval. Este método es el método que usamos para leer datos. Es de tipo double por defecto, por lo que debemos convertirlo al tipo cuando lo leamos.
Veamos la implementación.

import java.io.*;
public class test {
	public static void main(String args[]) throws IOException{
		StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		re.nextToken(); int n = (int)re.nval;
		System.out.println(n);
	}
}

Puede ver aquí que utilicé un método nextToken (). Este método debe escribirse cada vez que leemos datos, es decir, debemos escribir este método antes de leer datos. Por
ejemplo, si aún Para leer una m, entonces tengo que escribir
re.nextToken (); int m = (int) re.nval; En resumen, es correcto leer una escritura una vez

Alguien preguntará a continuación, solo puede leer enteros, ¿cómo leo cadenas?
Cuando leemos la cadena, no necesitamos agregar la clase StreamTokenizer,
podemos escribir directamente BufferedReader re = new BufferedReader (nuevo InputStreamReader (System.in));
vea el código

import java.io.*;
public class test {
	public static void main(String args[]) throws IOException{
//		StreamTokenizer re = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
		String x = re.readLine();
		System.out.println(x);
	}
}

De esta manera, podemos leer la cadena. Por supuesto, si usamos este método para leer la cadena, no necesitamos el método nextToken anterior.
Alguien lo dirá a continuación, luego quiero leer el número junto con la cadena Que debo hacer
Miremos el código

import java.io.*;
public class test {
	public static void main(String args[]) throws IOException{
		BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer r = new StreamTokenizer(re);
		r.nextToken(); int n = (int)r.nval;
		String x = re.readLine();
		System.out.println(n+" "+x);
//		输入 
//		3
//		afadfa
//		输出
//		3
	}
}

Tenga en cuenta que habrá un problema con la escritura anterior. Lo que queremos leer es un entero y luego una cadena, pero ¿qué pasa si solo leemos este entero aquí?
Esto se debe a que cuando leemos el entero, el entero se lee, pero el retorno de carro después del entero no se lee. Si usamos readLine () para leer directamente, no podremos leer la cadena en la siguiente línea, así que aquí Debe agregar un readLine () para leer el retorno de carro,
ver el código

import java.io.*;
public class test {
	public static void main(String args[]) throws IOException{
		BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer r = new StreamTokenizer(re);
		r.nextToken(); int n = (int)r.nval;
		re.readLine();
		String x = re.readLine();
		System.out.println(n+" "+x);
//		输入 
//		3
//		afadfa
//		输出
//		3 afadfa
	}
}

De esta forma, podemos leer enteros y cadenas de lectura. Cuando los datos son grandes, recomendamos que utilice este método para leer datos.
Luego tenemos que introducir una salida rápida. Esta entrada también es más rápida que la salida del sistema, por lo que lo haremos Al escribir programas con datos grandes, puede escribir así

import java.io.*;
public class test {
	public static void main(String args[]) throws IOException{
		BufferedReader re = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer r = new StreamTokenizer(re);
		PrintWriter pr = new PrintWriter(new OutputStreamWriter(System.out));
		r.nextToken(); int n = (int)r.nval;
		re.readLine();
		String x = re.readLine();
		pr.println(n+" "+x);
		pr.flush();
//		输入 
//		3
//		afadfa
//		输出
//		3 afadfa
	}
}

Cuando utilice la salida de PrintWriter, recuerde agregar una descarga final (), ok, aprenderemos a leer y generar rápidamente. Si
tiene alguna pregunta, deje un mensaje

32 artículos originales publicados · elogiados 5 · visitas 862

Supongo que te gusta

Origin blog.csdn.net/shizhuba/article/details/105068631
Recomendado
Clasificación