/**************************************************************************** ** COPYRIGHT (C): 1997 Cay S. Horstmann. All Rights Reserved. ** PROJECT: Practical OO Development with C++ and Java ** FILE: TextInputStream.java ** PURPOSE: input stream that can read ASCII numbers ** VERSION 1.0 ** PROGRAMMERS: Cay Horstmann (CSH) ** RELEASE DATE: 3-15-97 (CSH) ** UPDATE HISTORY: ****************************************************************************/ //package practicaloo; import java.io.*; public class TextInputStream extends FilterInputStream { public String readLine() { int ch; String r = ""; boolean done = false; while (!done) { try { ch = read(); if (ch < 0) done = true; else if ((char)ch == '\n') done = true; else if ((char)ch != '\r') r = r + (char) ch; } catch(java.io.IOException e) { done = true; } } return r; } private void skipSpace() { int ch; for(;;) { try { ch = read(); if (ch < 0) return; else if (!java.lang.Character.isWhitespace((char)ch)) { unread(ch); return; } } catch(java.io.IOException e) { } } } public String readString() { skipSpace(); int ch; String r = ""; boolean done = false; while (!done) { try { ch = read(); if (ch < 0) done = true; else if (java.lang.Character.isWhitespace((char)ch)) { done = true; unread(ch); } else r = r + (char) ch; } catch(java.io.IOException e) { done = true; } } return r; } public String readChar() { int ch; String r = ""; try { ch = read(); if (ch >= 0) r = r + (char)ch; } catch(java.io.IOException e) { } return r; } private String readDigits() { String r = ""; try { for(;;) { int ch = read(); if (ch < 0) return r; else if (!java.lang.Character.isDigit((char)ch)) { unread(ch); return r; } else r = r + (char) ch; } } catch(java.io.IOException e) { return r; } } public int readInt() { skipSpace(); int ch; String r = ""; boolean done = false; boolean digits = false; try { ch = read(); if (ch == '+' || ch == '-') r = r + (char)ch; else if (ch < 0) { done = true; } else unread(ch); r += readDigits(); } catch(java.io.IOException e) { } try { return Integer.valueOf(r).intValue(); } catch(NumberFormatException e) { return 0; } } public double readDouble() { skipSpace(); int ch; String r = ""; boolean done = false; boolean digits = false; try { ch = read(); if (ch == '+' || ch == '-') r = r + (char)ch; else if (ch < 0) return 0; else unread(ch); r += readDigits(); ch = read(); if (ch == '.') { r = r + (char)ch; r += readDigits(); } else if (ch >= 0) unread(ch); ch = read(); if (ch == 'E' || ch == 'e') { r = r + (char)ch; ch = read(); if (ch == '+' || ch == '-') r = r + (char)ch; else if (ch >= 0) unread(ch); r += readDigits(); } else if (ch >= 0) unread(ch); } catch(java.io.IOException e) { } try { return Double.valueOf(r).doubleValue(); } catch(NumberFormatException e) { return 0; } } public TextInputStream(InputStream in) { super(new PushbackInputStream(in)); } public void unread(int x) throws IOException { ((PushbackInputStream)in).unread(x); } }