java StreamTokenizer

时间:2012-01-15 21:52:11

标签: java stringtokenizer

我正在使用方法quoteChar('"')来处理字符串。 通常的转义序列(如“\ n”和“\ t”)会被识别,并在解析字符串时转换为单个字符。 有没有办法让字符串像它一样,这意味着如果我有字符串:

  

您好\ t世界

我想要

  

您好\ t世界

而不是:

  

Hello world

。 感谢

2 个答案:

答案 0 :(得分:1)

查看StreamTokenizer源代码,看起来字符串的转义行为是硬编码的。我只能想办法解决这个问题:

  1. 一旦你把它拿回来重新逃脱。这里的问题是,这与文件中的内容完全不匹配 - \ t将被转换回来,但\ 040不会。
  2. 在源ReaderReader之间插入您自己的StreamTokenizer。将读取的所有字符存储在缓冲区中。从该缓冲区的起点修剪空格以获得“原始”标记。
  3. 如果您的标记规则足够简单,请实施您自己的标记生成器。

答案 1 :(得分:1)

这对我有用:

public class MyReader extends BufferedReader {
    // You can choose whatever replacement you'd like(one wont occur in your text)
    private static final char TAB_REPLACEMENT = '\u0000';

    public MyReader(Reader in) {
        super(in);
    }

    @Override
    public int read() throws IOException {
        int charVal = super.read();
        if (charVal == '\t') {
            return TAB_REPLACEMENT;
        }
        return charVal;
    }
}

然后通过以下方式创建tokenizer:

myTokenizer = new StreamTokenizer(new MyReader(new FileReader(file)));

并通过

获取新的strval
MyTokenizer.sval.replace(TAB_REPLACEMENT, '\t')