Java StreamTokenizer unescape字符
我正在使用Java的Java StreamTokenizer unescape字符,java,Java,我正在使用Java的StreamTokenizer来标记代码文本输入。 当转义字符出现在字符串中时,标记器将取消转义它们,而我希望保持字符串不变 例如: Input: String str = "STRIN\tG"; StreamTokenizer Output: STRIN G Wanted Output: STRIN\tG 我的代码: BufferedReader reader = new BufferedReader(new FileReader("test.java")); S
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
,因为对删除注释的良好处理表明:
所有字节值“\u0000”到“\u0020”都被视为空白
而\t
有点像\u000a。。。您可以使用该方法更改此行为
旁注:如果选择println()
一个包含\t
的字符串,大多数/所有终端将把光标移动到下一个选项卡位置,而不是实际打印\t
干杯,添加
默认值
大小写
并按您的意愿处理字符:
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);
}
不要为此使用标记器,请使用String类的split方法。要对编辑(和问题)进行注释:那么,您希望输出与输入完全相同吗?为什么首先要检查代币?你认为什么令牌?你打算如何设置它们?没错。字符串的输出应该与输入完全相同。那么为什么要检查标记呢?字符串输出=输入;我不知道如何使用
whitespaceChars()
?我添加了行tokenizer.whitespaceChars(\u0009\u0009)代码>但它没有帮助。谢谢