StripJavaCommentspublic final class StripJavaComments extends BaseFilterReader implements ChainableReaderThis is a Java comment and string stripper reader that filters
those lexical tokens out for purposes of simple Java parsing.
(if you have more complex Java parsing needs, use a real lexer).
Since this class heavily relies on the single char read function,
you are recommended to make it work on top of a buffered reader. |
Fields Summary |
---|
private int | readAheadChThe read-ahead character, used for effectively pushing a single
character back. A value of -1 indicates that no character is in the
buffer. | private boolean | inStringWhether or not the parser is currently in the middle of a string
literal. | private boolean | quotedWhether or not the last char has been a backslash. |
Constructors Summary |
---|
public StripJavaComments()Constructor for "dummy" instances.
super();
| public StripJavaComments(Reader in)Creates a new filtered reader.
super(in);
|
Methods Summary |
---|
public java.io.Reader | chain(java.io.Reader rdr)Creates a new StripJavaComments using the passed in
Reader for instantiation.
StripJavaComments newFilter = new StripJavaComments(rdr);
return newFilter;
| public int | read()Returns the next character in the filtered stream, not including
Java comments.
int ch = -1;
if (readAheadCh != -1) {
ch = readAheadCh;
readAheadCh = -1;
} else {
ch = in.read();
if (ch == '"" && !quoted) {
inString = !inString;
quoted = false;
} else if (ch == '\\") {
quoted = !quoted;
} else {
quoted = false;
if (!inString) {
if (ch == '/") {
ch = in.read();
if (ch == '/") {
while (ch != '\n" && ch != -1 && ch != '\r") {
ch = in.read();
}
} else if (ch == '*") {
while (ch != -1) {
ch = in.read();
if (ch == '*") {
ch = in.read();
while (ch == '*" && ch != -1) {
ch = in.read();
}
if (ch == '/") {
ch = read();
break;
}
}
}
} else {
readAheadCh = ch;
ch = '/";
}
}
}
}
}
return ch;
|
|