StreamTokenizer unescape字符

时间:2015-05-26 11:21:24

标签: java

我正在使用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,因为删除了评论的良好处理

2 个答案:

答案 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);
        }