ScanReader - Custom Scanner for Java
/**
* @author Nikunj Khokhar
*/
Scans Input faster than BufferReader
Reduces Time Complexity
Flushes Buffer for every next input
scanChar() - scan single character
scanInt() - scan Integer value
scanLong() - scan Long value
scanString() - scan String value
scanDouble() - scan Double value
scanInt(int[] array) - scans complete Array(Integer)
scanLong(long[] array) - scans complete Array(Long)
Copy the Given Code below your java code.
Initialise Object for Given Class
ScanReader sc = new ScanReader (System .in );
Import necessary Classes :
import java .io .BufferedInputStream ;
import java .io .IOException ;
import java .io .InputStream ;
Throw IOException from your main method to handle Exception
Use Provided Methods.
Enjoy
import java .io .BufferedInputStream ;
import java .io .IOException ;
import java .io .InputStream ;
class Main {
public static void main (String ... as ) throws IOException {
ScanReader sc = new ScanReader (System .in );
int a =sc .scanInt ();
System .out .println (a );
}
}
class ScanReader ....
class ScanReader {
/**
* @author Nikunj Khokhar
*/
private byte [] buf = new byte [4 * 1024 ];
private int index ;
private BufferedInputStream in ;
private int total ;
public ScanReader (InputStream inputStream ) {
in = new BufferedInputStream (inputStream );
}
private int scan () throws IOException {
if (index >= total ) {
index = 0 ;
total = in .read (buf );
if (total <= 0 ) return -1 ;
}
return buf [index ++];
}
public char scanChar (){
int c =scan ();
while (isWhiteSpace (c ))c =scan ();
return (char )c ;
}
public int scanInt () throws IOException {
int integer = 0 ;
int n = scan ();
while (isWhiteSpace (n )) n = scan ();
int neg = 1 ;
if (n == '-' ) {
neg = -1 ;
n = scan ();
}
while (!isWhiteSpace (n )) {
if (n >= '0' && n <= '9' ) {
integer *= 10 ;
integer += n - '0' ;
n = scan ();
}
}
return neg * integer ;
}
public String scanString () throws IOException {
int c = scan ();
while (isWhiteSpace (c )) c = scan ();
StringBuilder res = new StringBuilder ();
do {
res .appendCodePoint (c );
c = scan ();
} while (!isWhiteSpace (c ));
return res .toString ();
}
private boolean isWhiteSpace (int n ) {
if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1 ) return true ;
else return false ;
}
public long scanLong () throws IOException {
long integer = 0 ;
int n = scan ();
while (isWhiteSpace (n )) n = scan ();
int neg = 1 ;
if (n == '-' ) {
neg = -1 ;
n = scan ();
}
while (!isWhiteSpace (n )) {
if (n >= '0' && n <= '9' ) {
integer *= 10 ;
integer += n - '0' ;
n = scan ();
}
}
return neg * integer ;
}
public void scanLong (long [] A ) throws IOException {
for (int i = 0 ; i < A .length ; i ++) A [i ] = scanLong ();
}
public void scanInt (int [] A ) throws IOException {
for (int i = 0 ; i < A .length ; i ++) A [i ] = scanInt ();
}
public double scanDouble () throws IOException {
int c = scan ();
while (isWhiteSpace (c )) c = scan ();
int sgn = 1 ;
if (c == '-' ) {
sgn = -1 ;
c = scan ();
}
double res = 0 ;
while (!isWhiteSpace (c ) && c != '.' ) {
if (c == 'e' || c == 'E' ) {
return res * Math .pow (10 , scanInt ());
}
res *= 10 ;
res += c - '0' ;
c = scan ();
}
if (c == '.' ) {
c = scan ();
double m = 1 ;
while (!isWhiteSpace (c )) {
if (c == 'e' || c == 'E' ) {
return res * Math .pow (10 , scanInt ());
}
m /= 10 ;
res += (c - '0' ) * m ;
c = scan ();
}
}
return res * sgn ;
}
}