[英]Error in counting number of words and characters from a file in java
我编写了以下代码来打印文件内容并打印文件中字符和单词的数量
import java.io.*;
import java.util.*;
class Ass53
{
public static void main(String args[]) throws Exception
{
File file=new File("sample.txt");
Scanner sc=new Scanner(new FileInputStream(file));
String line,line1;
int count1=0;
int count=0;
/*Loop for printing contents of file*/
while(sc.hasNextLine())
{
line=sc.nextLine();
System.out.println(line);
}
/*loop for counting number of character in file*/
while(sc.hasNext())
{
line1=sc.next();
for(int i=1;i<=line1.length();i++)
count1++;
}
System.out.println(count1);
/*loop for counting number of words in a file*/
while(sc.hasNext())
{
sc.next();
count++;
}
System.out.println("Number of words: " + count);
}
}
问题是只有第一个while循环正在执行。我想原因可能是第一个while循环的sc.nextLine。在第一个while循环后sc指向什么都没有?
有什么办法可以解决? 我希望我的其他while循环也能正常工作
每次执行nextLine()
,都使扫描仪前进到当前行之外。 当第一个循环结束时,您位于文件末尾,没有要扫描的内容。
一种解决方案是在每个循环之前重新创建扫描仪。 之前第二和第三只重复此while
:
sc=new Scanner(new FileInputStream(file));
另一种解决方案将涉及更多工作,但更优雅:使用单个循环将所有行存储在List<String>
,然后分析所有行以计算单词和字符。
每次循环播放完后,都需要将sc设置回流的开头。
我不会发布代码,因为这看起来像是家庭作业,并且我猜测类名称Ass53为“ Assignment53”。 查找并弄清楚如何将流重新设置为开始应该不难。
您可以尝试将其组合成一个循环,因为就目前而言,您实际上正在读取同一文件3次。 如果它是一个小文件,可能不会那么糟,但是如果它是一个大文件,那会很慢。
第一个循环说“直到我用完文件中的行,读取并打印它”。 然后,第二个循环在文件中查找更多字符,当然那里什么也没有。
一种选择是在每个循环之前重置扫描仪。 在第一个循环之后的每个循环之前,只需关闭并丢弃扫描仪,然后创建一个新的扫描仪即可。
不过,有更好的方法。 您可以逐个字符浏览文件(例如,使用BufferedReader ),并增加每个字符的字符数,以及每个换行符的换行数。 不要忘记考虑不以换行符结尾的文件。 只需要一个循环,就可以计算出字符总数和行数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.