1
2
3
4
5 package net.sf.tomp.pp;
6
7 /***
8 * @author tomp
9 */
10 public class CharReader {
11
12 private String src;
13
14
15
16 private int index;
17
18 private int len;
19
20 private boolean eof = false;
21
22 public CharReader(String s) {
23 src = s;
24 len = s.length();
25 }
26
27 public char next() {
28 if (index < len) {
29 eof = false;
30 return src.charAt(index++);
31 } else {
32 eof = true;
33 return 0;
34 }
35 }
36
37 public char at() {
38 return at(index);
39 }
40
41 public char at(int i) {
42 if (i < len) {
43 return src.charAt(i);
44 } else {
45 return 0;
46 }
47 }
48
49 public boolean eof() {
50 return eof;
51 }
52
53 public char nextNonspace(char c) {
54 while (!eof() && Character.isWhitespace(c)) {
55 c = next();
56 }
57 return c;
58 }
59
60 public int index() {
61 return index;
62 }
63
64 public char pushback() {
65 index--;
66 return at();
67 }
68
69 public String substring(int textBegin, int textEnd) {
70 return src.substring(textBegin, textEnd);
71 }
72 }