【问题标题】:Conflicting character counts字符数冲突
【发布时间】:2011-11-04 03:31:28
【问题描述】:

我正在尝试查找给定文本文件中的字符数。

我尝试同时使用扫描仪和 BufferedReader,但得到的结果相互矛盾。通过使用扫描仪,我在添加新行字符后连接每一行。例如。像这样:

    FileReader reader = new FileReader("sampleFile.txt");
    Scanner lineScanner = new Scanner(reader);
    String totalLines = "";

    while (lineScanner.hasNextLine()){
        String line = lineScanner.nextLine()+'\n';
        totalLines += line;
    }
    System.out.println("Count "+totalLines.length());

这将返回我的文件的真实字符数,即 5799

而当我使用时:

 BufferedReader reader = new BufferedReader(new FileReader("sample.txt"));

 int i;
 int count = 0;
 while ((i = in.read()) != -1) {
    count++;
 }

 System.out.println("Count "+count);

我得到 5892。

我知道如果只有一行,使用 lineScanner 会减一,但对于我的文本文件,我得到了正确的输出。

同样在记事本++中,文件长度(以字节为单位)为 5892,但不含空格的字符数为 5706。

【问题讨论】:

  • 那么你的问题到底是什么?
  • @PTBG 我的问题是为什么我使用扫描仪或缓冲阅读器会得到不同的答案?
  • 好的,我刚刚检查过了,差异是由于扫描仪没有计算 '\r'。如果我在 linux 上运行这段代码,我会得到不同的输出吗?

标签: java


【解决方案1】:

您的文件可能有以\r\n 而不是\n 结尾的行。这可能会导致您的差异。

【讨论】:

  • 是的,但是我被告知文本文件包含 5799 个字符,除非我的老师计算错误。
【解决方案2】:

您必须考虑文本文件中的换行符/回车符。这也算一个字符。

我建议使用 BufferedReader,因为它会返回更准确的结果。

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多