我正在使用该方法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)));
并通过
MyTokenizer.sval.replace(TAB_REPLACEMENT, '\t')