2012-01-15 3 views
0

私はquoteChar('"')メソッドを使用して文字列を処理しています。 "\ n"や "\ t"などの通常のエスケープシーケンスは、文字列が解析されるときに認識され、単一の文字に変換されます。java StreamTokenizer

こんにちは\のtworld

iは

こんにちは\を取得したい: それは私が文字列を持っている場合、つまり、あるだけの方法を文字列を取得する方法はありますtworld

ない:

Hello world

です。 ありがとう

+0

追加することによって、新しいstrvalを得る:

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

をし、その後によるトークナイザを作成"文字列に" \ n " – JustinDanielson

答えて

1

StreamTokenizerソースを見ると、文字列のエスケープ動作がハードコードされているように見えます。

  1. 戻ってしまえば、再度エスケープすることができます。ここでの問題は、これがファイル内のものとまったく同じではないことです。\ tは変換されますが、\ 040は変換されません。
  2. ReaderをソースReaderStreamTokenizerの間に挿入します。最後のトークンに対して読み込まれたすべてのcharをバッファに格納します。そのバッファの先頭から空白を切り捨てて、「生の」トークンを取得します。
  3. トークン化ルールが十分に単純な場合は、独自のトークナイザを実装してください。
1

それは私のために働いて何:nは\\」

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

MyTokenizer.sval.replace(TAB_REPLACEMENT, '\t') 
関連する問題