0

メソッドquoteChar('"')を使用して文字列を処理しています。"\n" や "\t" などの通常のエスケープ シーケンスは、文字列が解析されるときに認識され、単一の文字に変換されます。文字列をそのまま取得する方法はありますか?つまり、文字列がある場合:

ハロー\tワールド

私は手に入れたい

ハロー\tワールド

ではない:

こんにちは世界

. ありがとう

4

2 に答える 2

1

ソースを見ると、StreamTokenizer文字列のエスケープ動作がハードコーディングされているように見えます。私はそれを回避するためのいくつかの方法しか考えられません:

  1. 文字列を取り戻したら、文字列を再度エスケープします。ここでの問題は、これがファイルにあったものと正確に一致しないことです-\ tは元に戻されますが、\040は変換されません。
  2. ReaderソースReaderとの間に独自のものを挿入しますStreamTokenizer。最後のトークンに対して読み取られたすべての文字をバッファーに保管します。そのバッファの先頭から空白を削除して、「生の」トークンを取得します。
  3. トークン化ルールが十分に単純な場合は、独自のトークナイザーを実装します。
于 2012-01-16T00:40:13.447 に答える
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)));

によって新しいstrvalを取得します

MyTokenizer.sval.replace(TAB_REPLACEMENT, '\t')
于 2015-06-12T09:50:35.110 に答える