Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.nio.charset.StandardCharsets;
- import java.util.Arrays;
- import java.io.*;
- public class SuperScanner {
- private Reader inputStreamReader;
- private char[] buffer = new char[10000];
- private boolean isBufferEmpty = true;
- private void extendBuffer(int r) {
- buffer = Arrays.copyOf(buffer, buffer.length + 5000);
- try {
- inputStreamReader.read(buffer, r + 1, 5000);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public SuperScanner(InputStream sorse) {
- this.inputStreamReader = new InputStreamReader(sorse, StandardCharsets.UTF_8);
- }
- public SuperScanner(String sorse) {
- this.inputStreamReader =
- new InputStreamReader(new ByteArrayInputStream(sorse.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
- }
- public SuperScanner(File file) {
- try {
- this.inputStreamReader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- public int findLinePatternInBuffer() {
- if(isClosed()) return -2;
- try {
- if (isBufferEmpty) {
- inputStreamReader.read(buffer, 0, buffer.length);
- if (buffer[0] == 0) throw new IOException();
- isBufferEmpty = false;
- }
- for (int i = 0; i < buffer.length; i++) {
- if (buffer[i] == '\n') return i;
- if (buffer[i] == 0) return i;
- if (i == buffer.length - 1) {
- extendBuffer(i);
- }
- }
- return -2;
- } catch (IOException e) {
- return -2;
- }
- }
- public boolean isClosed(){
- return buffer[0]==-1;
- }
- public int findStringPatternInBuffer() {
- if(isClosed()) return -2;
- try {
- if (isBufferEmpty) {
- inputStreamReader.read(buffer, 0, buffer.length);
- if (buffer[0] == 0) throw new IOException();
- isBufferEmpty = false;
- }
- for (int i = 0; i < buffer.length; i++) {
- if (!(Character.isLetter(buffer[i]) || Character.getType(buffer[i]) == Character.DASH_PUNCTUATION ||
- buffer[i] == '\''||Character.isDigit(buffer[i]))) return i;
- if (buffer[i] == 0) return i;
- if (i == buffer.length - 1) {
- extendBuffer(i);
- }
- }
- return -2;
- } catch (IOException e) {
- return -2;
- }
- }
- public void reduseBuffer(int r) {
- char[] newBuffer = Arrays.copyOfRange(buffer, r + 1, buffer.length);
- buffer = newBuffer;
- if (buffer.length != 0 && buffer[0] == 0) {
- isBufferEmpty = true;
- }
- if (buffer.length == 0) {
- extendBuffer(-1);
- }
- }
- public String nextLine() {
- int i = findLinePatternInBuffer();
- char[] result = Arrays.copyOfRange(buffer, 0, i);
- reduseBuffer(i);
- return String.valueOf(result);
- }
- public boolean hasNextLine() {
- if (findLinePatternInBuffer() == -2) {
- return false;
- }
- return true;
- }
- public String next() {
- int i = findStringPatternInBuffer();
- char[] result = Arrays.copyOfRange(buffer, 0, i);
- reduseBuffer(i);
- //System.out.println(String.valueOf(result));
- return String.valueOf(result);
- }
- public boolean hasNext() {
- if (findStringPatternInBuffer() == -2||buffer[0]==0) {
- return false;
- }
- return true;
- }
- public boolean hasNextInt(){
- return hasNext();
- }
- public int nextInt(){
- return Integer.parseInt(next());
- }
- public void close() {
- try {
- inputStreamReader.close();
- } catch (IOException e) {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement