Java FileReader中的read()方法如何在文件中移动?
所以我写了一个程序,读取一个特定的文件,并返回每个字符的使用频率。这是通过使用单链接列表(不是java LinkedList,但非常类似)实现的。我想知道的是为什么会这样:Java FileReader中的read()方法如何在文件中移动?,java,file,io,Java,File,Io,所以我写了一个程序,读取一个特定的文件,并返回每个字符的使用频率。这是通过使用单链接列表(不是java LinkedList,但非常类似)实现的。我想知道的是为什么会这样: while(txtFile.read() != -1){ Character letter = (char) txtFile.read(); freqBag.add(Character.toLowerCase(letter)); } int c; w
while(txtFile.read() != -1){
Character letter = (char) txtFile.read();
freqBag.add(Character.toLowerCase(letter));
}
int c;
while((c = txtFile.read()) != -1){
Character letter = (char) c;
freqBag.add(Character.toLowerCase(letter));
}
不起作用(它不会返回给定字符的正确频率),原因如下:
while(txtFile.read() != -1){
Character letter = (char) txtFile.read();
freqBag.add(Character.toLowerCase(letter));
}
int c;
while((c = txtFile.read()) != -1){
Character letter = (char) c;
freqBag.add(Character.toLowerCase(letter));
}
工作。我写了第一个,一个朋友帮我修复了它。首先,你需要记住,当你调用read方法时,你已经从文件中读取了一个字节,所以如果你在while语句中读取,你会丢失一个字节
第二件事是,对我来说(考虑到运算符优先级),这两段代码的作用完全相同,因此问题可能出现在代码的其他部分。它不起作用,因为您正在丢弃字符。每个read()函数返回下一个字节(作为有符号整数),因此代码将删除每个偶数字符(0、2、4…) 您朋友的代码也不应该工作:
int c; // variable outside the loop
while((c = txtFile.read()) != -1){ // Read a character into c, compare to -1
Character letter = (char) txtFile.read(); // Read another character
freqBag.add(Character.toLowerCase(letter)); // Store this letter
}
正确的方法是只读取一次:
int c;
while((c = txtFile.read()) != -1) {
freqBag.add(Character.toLowerCase((char)c));
}
我怀疑您可能是打字错误,或者您使用了不同的文件,但没有意识到信件仍在丢失。两者都不起作用。它们都只处理偶数字符。哦,是的,这是一个打字错误。当字符字母=(char)c;,它就起作用了;。谢谢你的解释!