我刚从文件中读取文字。 我有一项任务,我需要打印文件中的单词数量。
我在mac OS上使用TextEdit,以.rtf结尾
当我运行以下程序时,即使文档为空,我也会得到输出5。当我添加单词时,计数不会正确递增。
感谢。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Analyze{
public static void main(String[] args) throws FileNotFoundException{
Scanner console = new Scanner(System.in);
int words = 0;
System.out.println("This is a word counter");
System.out.println("File name");
String filename = console.next();
File name = new File(filename);
Scanner int2 = new Scanner(name);
while (int2.hasNext()) {
String temp = int2.next();
words++;
}
System.out.println(words);
}
}
答案 0 :(得分:3)
问题是您正在阅读RTF文件。
A'空白' (如没有输入文本)使用TextEdit生成的RTF文件如下所示:
{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf130
{\fonttbl}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww10800\viewh8400\viewkind0
}
如您所见,五行对应于5的输出。
在你的程序中解析RTF,我怀疑你想做,或者将TextEdit切换到纯文本模式。见here
答案 1 :(得分:0)
您要计算的文件是RTF文件?它是否支持斜体,粗体,字体选择等等?在这种情况下,它可能包含一些数据,即使没有文本。您的程序不关心文件格式,因此它天真地将所有内容都作为文本读取。
尝试在您的文件上运行od
或hexdump
(不确定Mac OS X上是否存在这些?) - 它们会打印文件的确切字节。一个真正空的文件不应该产生任何输出。
如果您的计算机没有od
或hexdump
程序,则可以尝试cat
。它不会将内容打印为数字,因此它不能提供100%准确的特殊字符视图,但它应该能够向您展示您的文件是否为空。
答案 2 :(得分:0)
除了RTF问题,还要注意
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
中有空格的
空白字符:[\ t \ n \ x0B \ f \ r \ n]
所以计数包括标签,换行符等,而不仅仅是空白