java StreamTokenizer



我使用方法quoteChar('"')来处理字符串。在解析字符串时,通常的转义序列(如"\n"one_answers"\t")会被识别并转换为单个字符。有没有任何方法可以得到字符串,也就是说,如果我有字符串:

你好\towrld

我想要

你好\towrld

而不是:

你好世界

感谢

查看StreamTokenizer源代码,字符串的转义行为似乎是硬编码的。我只能想出几种方法来绕过它:

  1. 一旦你把绳子拿回来,就重新解开。这里的问题是,这与文件中的内容不完全匹配——\t将被转换回,但\040不会
  2. 在源ReaderStreamTokenizer之间插入您自己的Reader。将为最后一个令牌读取的所有字符存储在缓冲区中。从该缓冲区的开头修剪空白以获得"原始"标记
  3. 如果你的标记化规则足够简单,那么实现你自己的标记化器

这对我有效:

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;
    }
}

然后通过以下方式创建令牌化器:

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

并通过获取新的strval

MyTokenizer.sval.replace(TAB_REPLACEMENT, 't')

相关内容

  • 没有找到相关文章

最新更新