メソッドquoteChar('"')
を使用して文字列を処理しています。"\n" や "\t" などの通常のエスケープ シーケンスは、文字列が解析されるときに認識され、単一の文字に変換されます。文字列をそのまま取得する方法はありますか?つまり、文字列がある場合:
ハロー\tワールド
私は手に入れたい
ハロー\tワールド
ではない:
こんにちは世界
. ありがとう
メソッドquoteChar('"')
を使用して文字列を処理しています。"\n" や "\t" などの通常のエスケープ シーケンスは、文字列が解析されるときに認識され、単一の文字に変換されます。文字列をそのまま取得する方法はありますか?つまり、文字列がある場合:
ハロー\tワールド
私は手に入れたい
ハロー\tワールド
ではない:
こんにちは世界
. ありがとう
ソースを見ると、StreamTokenizer
文字列のエスケープ動作がハードコーディングされているように見えます。私はそれを回避するためのいくつかの方法しか考えられません:
Reader
ソースReader
との間に独自のものを挿入しますStreamTokenizer
。最後のトークンに対して読み取られたすべての文字をバッファーに保管します。そのバッファの先頭から空白を削除して、「生の」トークンを取得します。それは私のために働いた:
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')