2012-01-15 53 views
0

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

你好\ t世界

我想

你好\ t世界

,而不是:

Hello world

。 谢谢

+0

添加得到新strval“\\ñ “找到字符串”\ n“ – JustinDanielson 2012-01-15 22:03:23

回答

1

看看StreamTokenizer来源,它看起来像字符串的转义行为是硬编码。我只能想到几种方法来解决它:

  1. 一旦你找回它,重新逃避字符串。这里的问题是,这不会完全匹配文件中的内容 - \ t将被转换回,但\ 040不会。
  2. 在源ReaderStreamTokenizer之间插入您自己的Reader。将所有为最后一个标记读取的字符存储在缓冲区中。修剪该缓冲区开始处的空白以获取“原始”标记。
  3. 如果您的标记规则足够简单,请实施您自己的标记器。
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; 
    } 
} 

,然后创建由标记者:

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

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