2012-01-15 38 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') 
相關問題