0

我正在编写一个程序,该程序一方面要求程序打印文件中有多少个字符(包括空格)。我现在拥有的代码虽然每次都返回 0,但我不确定它为什么不计算字符。

public int getcharCount(Scanner textFile) {

        int count = 0;

        while(textFile.hasNext()) {
            String line = textFile.nextLine();
            for(int i=0; i < line.length(); i++)
                count++;
        }   
        return count;

    }

编辑:我的程序规范说我应该使用扫描仪。尽管我不确定,但我不相信它会进入 for 循环。当我使用相同的技术来计算文件中的行数时,它工作得很好。该代码是:

 public int getLineCount(Scanner textFile) {
    int lineCount = 0;

    while(textFile.hasNext()) {
        String line = textFile.nextLine();
        lineCount++;
    }

    return lineCount;
}

我们不需要检查该行是否包含任何内容。如果它出现在文本文件的中间,则应计为一个字符。

4

6 回答 6

6

我不知道为什么它不起作用(并且下面的代码不会修复它),但是

  for(int i=0; i < line.length(); i++)
            count++;

可以更简洁地写成

  count += line.length();
于 2010-03-31T01:22:16.170 回答
4

你为什么使用扫描仪?一个简单的阅读器就足够了。如果您坚持使用扫描仪,您必须了解它将输入划分为由某种模式(默认为空格)分隔的字段,也许可以设置一个空模式,以便字段与字符相对应(但同样,这将矫枉过正,只需使用阅读器)

于 2010-03-31T01:25:52.483 回答
1

在将扫描仪传递给之前,您是否已经阅读了扫描仪的所有内容getcharCount()

于 2010-03-31T01:42:05.097 回答
0

您需要分配文件,打开它,然后重置到开头。你没有表现出任何这些。

于 2010-03-31T01:21:57.240 回答
0

您为扫描仪设置了什么分隔符?您没有在代码中显示它,但您需要使其将一行视为单个标记。

scanner.useDelimiter("\n");

另外,您说第二个代码示例运行良好。您是否打印出 line 的值以验证它是否包含任何内容?它可能正确地计算了行数,但如果行实际上没有包含任何内容,那么这将有助于解释为什么它没有进入你的 for 循环。

于 2010-03-31T01:30:43.343 回答
0

我没有与 Scanner 合作太多,但不会

textFile.hasNextline();

textFile.hasNext();

只是一个想法——我不确定这是否会对执行产生重大影响

于 2010-03-31T02:24:20.737 回答