Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.07 KB | None | 0 0
  1. import java.io.*;
  2. import java.nio.charset.StandardCharsets;
  3. import java.util.Arrays;
  4. import java.io.*;
  5.  
  6. public class SuperScanner {
  7.  
  8.     private Reader inputStreamReader;
  9.     private char[] buffer = new char[10000];
  10.     private boolean isBufferEmpty = true;
  11.  
  12.     private void extendBuffer(int r) {
  13.         buffer = Arrays.copyOf(buffer, buffer.length + 5000);
  14.         try {
  15.             inputStreamReader.read(buffer, r + 1, 5000);
  16.         } catch (IOException e) {
  17.             e.printStackTrace();
  18.         }
  19.     }
  20.  
  21.     public SuperScanner(InputStream sorse) {
  22.         this.inputStreamReader = new InputStreamReader(sorse, StandardCharsets.UTF_8);
  23.     }
  24.  
  25.     public SuperScanner(String sorse) {
  26.         this.inputStreamReader =
  27.                 new InputStreamReader(new ByteArrayInputStream(sorse.getBytes(StandardCharsets.UTF_8)), StandardCharsets.UTF_8);
  28.     }
  29.  
  30.     public SuperScanner(File file) {
  31.         try {
  32.             this.inputStreamReader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
  33.         } catch (FileNotFoundException e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37.  
  38.     public int findLinePatternInBuffer() {
  39.         if(isClosed()) return -2;
  40.         try {
  41.             if (isBufferEmpty) {
  42.                 inputStreamReader.read(buffer, 0, buffer.length);
  43.                 if (buffer[0] == 0) throw new IOException();
  44.                 isBufferEmpty = false;
  45.             }
  46.             for (int i = 0; i < buffer.length; i++) {
  47.                 if (buffer[i] == '\n') return i;
  48.                 if (buffer[i] == 0) return i;
  49.                 if (i == buffer.length - 1) {
  50.                     extendBuffer(i);
  51.                 }
  52.             }
  53.             return -2;
  54.         } catch (IOException e) {
  55.             return -2;
  56.         }
  57.     }
  58.  
  59.     public boolean isClosed(){
  60.         return buffer[0]==-1;
  61.     }
  62.  
  63.     public int findStringPatternInBuffer() {
  64.         if(isClosed()) return -2;
  65.         try {
  66.             if (isBufferEmpty) {
  67.                 inputStreamReader.read(buffer, 0, buffer.length);
  68.                 if (buffer[0] == 0) throw new IOException();
  69.                 isBufferEmpty = false;
  70.             }
  71.             for (int i = 0; i < buffer.length; i++) {
  72.                 if (!(Character.isLetter(buffer[i]) || Character.getType(buffer[i]) == Character.DASH_PUNCTUATION ||
  73.                         buffer[i] == '\''||Character.isDigit(buffer[i]))) return i;
  74.                 if (buffer[i] == 0) return i;
  75.                 if (i == buffer.length - 1) {
  76.                     extendBuffer(i);
  77.                 }
  78.             }
  79.             return -2;
  80.         } catch (IOException e) {
  81.             return -2;
  82.         }
  83.     }
  84.  
  85.     public void reduseBuffer(int r) {
  86.         char[] newBuffer = Arrays.copyOfRange(buffer, r + 1, buffer.length);
  87.         buffer = newBuffer;
  88.         if (buffer.length != 0 && buffer[0] == 0) {
  89.             isBufferEmpty = true;
  90.         }
  91.         if (buffer.length == 0) {
  92.             extendBuffer(-1);
  93.         }
  94.     }
  95.  
  96.     public String nextLine() {
  97.         int i = findLinePatternInBuffer();
  98.         char[] result = Arrays.copyOfRange(buffer, 0, i);
  99.         reduseBuffer(i);
  100.         return String.valueOf(result);
  101.     }
  102.  
  103.     public boolean hasNextLine() {
  104.         if (findLinePatternInBuffer() == -2) {
  105.             return false;
  106.         }
  107.         return true;
  108.     }
  109.  
  110.     public String next() {
  111.         int i = findStringPatternInBuffer();
  112.         char[] result = Arrays.copyOfRange(buffer, 0, i);
  113.         reduseBuffer(i);
  114.         //System.out.println(String.valueOf(result));
  115.         return String.valueOf(result);
  116.     }
  117.  
  118.     public boolean hasNext() {
  119.         if (findStringPatternInBuffer() == -2||buffer[0]==0) {
  120.             return false;
  121.         }
  122.         return true;
  123.     }
  124.  
  125.     public boolean hasNextInt(){
  126.         return hasNext();
  127.     }
  128.  
  129.     public int nextInt(){
  130.         return Integer.parseInt(next());
  131.     }
  132.  
  133.     public void close() {
  134.         try {
  135.             inputStreamReader.close();
  136.         } catch (IOException e) {
  137.  
  138.         }
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement