Java StreamTokenizer unescape字符

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

我正在使用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
,因为对删除注释的良好处理表明:

所有字节值“\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)但它没有帮助。谢谢