结果正确地给出了单词,但不是字符或行。如何让扫描仪返回到文件的开头?使用三个扫描仪不起作用。
public static void main (String[] args) throws FileNotFoundException
{
int iCharCount = 0;
int iWordCount = 0;
int iLineCount = 0;
Scanner scConsole = new Scanner(System.in);
System.out.println("Input File:");
String sInputFile = scConsole.next();
File inputFile = new File(sInputFile);
Scanner in = new Scanner(inputFile);
//gets the number of words
while(in.hasNext())
{
String sInput = in.next();
iWordCount++;
}
System.out.println("Words: " + iWordCount);
//gets the number of characters
while(in.hasNext())
{
char ch = in.next().charAt(0);
iCharCount++;
}
System.out.println("Characters: " + iCharCount);
//gets the number of lines
while(in.hasNextLine())
{
String sLine = in.nextLine();
iLineCount++;
}
System.out.println("Lines: " + iLineCount);
scConsole.close();
in.close();
}
所以,当我输入一个包含句子的文本文件时:“猫在帽子里。” 结果是: 字数:6 人物:0 行:0
答案 0 :(得分:1)
更好的方法是将整个文件读作String,然后你可以编写一个类:
public class WordCount {
private static String SEPARATOR = System.getProperty("line.separator");
private String text;
public WordCount(final String text) {
this.text = text;
}
public int chars() {
return text.length();
}
public int words() {
if (text.isEmpty()) {
return 0;
}
return text.trim().split("\\s+").length;
}
public int lines() {
if (text.isEmpty()) {
return 0;
}
return text.trim().split(SEPARATOR).length;
}
public void setText(final String text) {
this.text = text;
}
}
你的主要可能是:
public class Main {
public static void main(String[] args) {
final String text = readTheWholeText(); // you have to implement this
WordCount wc = new WordCount(text);
final int chars = wc.chars();
final int lines = wc.lines();
final int words = wc.words();
System.out.println("words = " + words + " chars = " + chars + " lines = " + lines);
}
}
btw阅读整个文本文件:Reading from a text file and storing in a String或Java: How to read a text file
答案 1 :(得分:0)
这是因为Scanner维护用于逐行读取文件的光标。 因此,每次使用in.next时,光标都会重新定位以匹配新行。 因此,即使在您提供的示例中,in.next也会读取第一行。当再次使用in.next时,它会将光标移动到下一行。但这里只有一条线。 那就是你得到的行数和字数为0。
更好的方法是将in.next存储在String变量中,然后使用它来查找字符数。
并相应地更改行号
答案 2 :(得分:0)
我认为这是作业。我不认为Scanner是最好的选择,可能BufferedReader会更好,但Scanner会工作。您无需备份,您可以通过该文件轻松完成此操作。
你正在向后做,不先计算单词,抓住每一行(并保持计数),然后在空格上划分行以获得单词计数,然后计算每个单词中的字符。
类似的东西(这是未经测试的,只是让你走上正轨):
//gets the number of lines
int iLineCount = 0;
int wordCount = 0;
int characterCount = 0;
while (in.hasNextLine()) {
String sLine = in.nextLine();
iLineCount++;
String[] words = sLine.split(" ");
wordCount =+ words.length;
for (String word : words) {
characterCount =+ word.length();
}
}
答案 3 :(得分:0)
假设这是一个家庭作业,最好自己尝试,但你可以针对每个案例尝试以下方法(如果允许使用它们):
1)对于行数:按行分隔符分割文本,然后获取数组大小。
2)对于字数:按空格分隔符和行分隔符分割文本,然后获取数组大小。
3)对于字符计数:使用String length()方法。
搜索字符串split(...)
和length()
方法。