我四处寻找答案(我肯定他们在外面),但我不确定这是可能的。
所以,我得到了一个巨大的文件,里面有“f r”这个词。我使用RandomAccessFile是因为我知道它在哪里(某种程度上),因此可以使用kind()函数来实现。
要知道我已经找到了它,我在我的程序中有一个字符串“f r”,我检查它是否相等。问题是,我运行了调试器,当我到达“f r”时,我要比较的是“f r”。
所以我的程序终止时没有找到任何“f r”。
这是我用来得到一个词的代码:
private static String getWord(RandomAccessFile file) throws IOException {
StringBuilder stb = new StringBuilder();
String word;
char c;
c = (char)file.read();
int end;
do {
stb.append(c);
end = file.read();
if(end==-1)
return "-1";
c = (char)end;
} while (c != ' ');
word = stb.toString();
word.trim();
return word;
}因此,基本上,我将文件中当前点的所有字符返回到第一个“-”字符。所以基本上我得到了这个词,但是既然(char)file.read();读取一个字节(我认为),UTF-8‘’就变成了‘s’和‘two’?
这种猜测的原因之一是,如果我用编码UTF-8打开我的文件,那就是“f r”,但是如果我用ISO-8859-15在相同的地方打开文件,那么我们现在就有了我的getWord方法所返回的确切内容:“f
所以我的问题是:
当我和“f”和“f”坐在一起的时候,有没有办法解决这个问题?就像说“阅读”“f-8字符串”来得到“f”一样?
发布于 2016-09-01 04:43:58
import java.nio.charset.Charset;
String encodedString = new String(originalString.getBytes("ISO-8859-15"), Charset.forName("UTF-8"));发布于 2016-09-01 06:31:02
如果您必须使用RandomAccessFile,您应该先将内容读取到byte[]中,然后将完整的数组转换为String,大致如下所示:
byte[] buffer = new byte[whatever];
file.read(buffer);
String result = new String(buffer,"UTF-8");这只是给你一个一般的印象,做什么,你将不得不增加一些长度处理等。
如果您在UTF-8序列的中间开始读取,这将不能正常工作,但是任何其他方法也是如此。
发布于 2016-09-01 05:35:19
您正在使用RandomAccessFile.read()。它读取单个字节。UTF-8有时对一个字符使用几个字节。
本文讨论了从RandomAccessFile中读取UTF-8的不同方法:Java:从具有缓冲输入的随机访问文件中读取字符串。
如果您不一定需要一个RandomAccessFile,那么一定要切换到读取字符而不是字节。
如果可能的话,我建议默认搜索下一个单词的Scanner.next()。
https://stackoverflow.com/questions/39262555
复制相似问题