StreamTokenizer 在遇到斜杠时停止
StreamTokenizer stops when it hits a slash
考虑这个程序,在教程点上找到(其中 br
是一个 BufferedReader 对象):
boolean eof = false;
// Parse incoming request
StreamTokenizer st = new StreamTokenizer(br);
do {
int token = st.nextToken();
switch (token) {
case StreamTokenizer.TT_EOF:
System.out.println("End of File encountered.");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("End of Line encountered.");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
if (token == '!') {
eof = true;
}
}
} while (!eof);
此代码段适用于像 "Hello this is a string"
这样的字符串,它将在其中打印出:
Word: Hello
Word: this
Word: is
Word: a
Word: string
但是如果我这样做:"Hello /this is a string"
它只会打印出
Word: Hello
为什么会这样,我该如何解决?
正斜杠 / 在 StreamTokenizer 中不被视为普通字符 class。您可以使用 ordinaryChar 方法更改该默认行为:
import java.io.*;
public class StreamTokenizerSO {
public static void main(String[] args) throws IOException {
String aString = "Hello /this is a string";
Reader inputString = new StringReader(aString);
BufferedReader br = new BufferedReader(inputString);
boolean eof = false;
// Parse incoming request
StreamTokenizer st = new StreamTokenizer(br);
st.ordinaryChar('/');
do {
int token = st.nextToken();
switch (token) {
case StreamTokenizer.TT_EOF:
System.out.println("End of File encountered.");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("End of Line encountered.");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
if (token == '!') {
eof = true;
}
}
} while (!eof);
}
}
通过谷歌搜索 "StreamTokenizer forward slash" 找到了这个 link:http://www.dickbaldwin.com/java/Java061.htm
考虑这个程序,在教程点上找到(其中 br
是一个 BufferedReader 对象):
boolean eof = false;
// Parse incoming request
StreamTokenizer st = new StreamTokenizer(br);
do {
int token = st.nextToken();
switch (token) {
case StreamTokenizer.TT_EOF:
System.out.println("End of File encountered.");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("End of Line encountered.");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
if (token == '!') {
eof = true;
}
}
} while (!eof);
此代码段适用于像 "Hello this is a string"
这样的字符串,它将在其中打印出:
Word: Hello
Word: this
Word: is
Word: a
Word: string
但是如果我这样做:"Hello /this is a string"
它只会打印出
Word: Hello
为什么会这样,我该如何解决?
正斜杠 / 在 StreamTokenizer 中不被视为普通字符 class。您可以使用 ordinaryChar 方法更改该默认行为:
import java.io.*;
public class StreamTokenizerSO {
public static void main(String[] args) throws IOException {
String aString = "Hello /this is a string";
Reader inputString = new StringReader(aString);
BufferedReader br = new BufferedReader(inputString);
boolean eof = false;
// Parse incoming request
StreamTokenizer st = new StreamTokenizer(br);
st.ordinaryChar('/');
do {
int token = st.nextToken();
switch (token) {
case StreamTokenizer.TT_EOF:
System.out.println("End of File encountered.");
eof = true;
break;
case StreamTokenizer.TT_EOL:
System.out.println("End of Line encountered.");
break;
case StreamTokenizer.TT_WORD:
System.out.println("Word: " + st.sval);
break;
case StreamTokenizer.TT_NUMBER:
System.out.println("Number: " + st.nval);
break;
default:
System.out.println((char) token + " encountered.");
if (token == '!') {
eof = true;
}
}
} while (!eof);
}
}
通过谷歌搜索 "StreamTokenizer forward slash" 找到了这个 link:http://www.dickbaldwin.com/java/Java061.htm