我正在使用Java StreamTokenizer
来标记代码文本输入。
当转义字符出现在字符串中时,标记生成器会取消它们,而我希望保持字符串不变。
例如:
Input: String str = "STRIN\tG";
StreamTokenizer Output: STRIN G
Wanted Output: STRIN\tG
我的代码:
BufferedReader reader = new BufferedReader(new FileReader("test.java"));
StreamTokenizer tokenizer = new StreamTokenizer(reader);
boolean eof = false;
do {
int type = 0;
type = tokenizer.nextToken();
switch (type) {
case StreamTokenizer.TT_EOF:
eof = true;
break;
case '"':
System.out.println(tokenizer.sval);
break;
}
} while (!eof);
修改
我选择使用StreamTokenizer
,因为删除了评论的良好处理
答案 0 :(得分:1)
StreamTokenizer
constructor JavaDoc州:
所有字节值' \ u0000'通过' \ u0020'被认为是白色空间。
和\t
有点像\ u000a ...您可以使用whitespaceChars()
方法更改此行为。
附注:如果您选择println()
包含\t
大多数/所有终端的字符串,则会将光标移动到下一个标签位置,而不是实际打印\t
...
干杯,
答案 1 :(得分:0)
添加default
case
并根据需要处理该字符:
switch (type) {
case StreamTokenizer.TT_EOL:
System.out.println("End of Line encountered.");
break;
case StreamTokenizer.TT_WORD:
System.out.print(tokenizer.sval);
break;
case StreamTokenizer.TT_EOF:
eof = true;
break;
case '"':
System.out.println(tokenizer.sval);
break;
default:
System.out.print((char) type);
}