我想创建一个从具有多行单词的文本文件中读取的应用程序。 它将通过计算单词之间的空格数并添加校正因子来输出wordcount。
我不确定使用哪种输入方法来执行此操作。 我的输出与当前代码不正确。它不会计算第一个之后的单词,也不计算空格。
我该如何解决?
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new FileReader( "/input5.txt"));//file read
System.out.println("Echo print of the input file is " + in.nextLine());
int i = 0;
int counter = 0;
String a = in.next();
while (in.hasNextLine()) {
while (i < a.length()) {
if (a.charAt(i) == ' ') {
counter++;
}
i++;
}
i = 0;
}
int wordcount = (counter + 1);
System.out.println("The word count is " + wordcount);
}
打赌Aiwegfu24r; q0912j感冒jus not Money Nil Nelzik1-aj129puehilhwueildgyuol
输入文件。
public static void main(String[] args) throws IOException {
int count = 0;
Scanner in = new Scanner(new FileReader( "/input5.txt"));//file read
while (in.hasNextLine()) {
System.out.println("echo print of the input: " + in.nextLine());
in.reset();
}
while (in.hasNext()) {
count++;
in.next();
}
System.out.println("The word count is " + count);
}
这是新代码。
答案 0 :(得分:3)
Scanner.next()的默认分隔符是空格。每次调用next()时,程序都会删除空格并返回“单词”。因此,如果您只计算next()的调用次数,您可能会发现问题更容易:
Scanner in = new Scanner(new FileReader(dir + "/input5.txt"));
int count = 0;
while (in.hasNext()) {
count++;
in.next();
}
另外,请注意在初始化计数循环之前调用nextLine()。扫描程序对象有一个内部缓冲区,每次调用next()或nextLine()时,该缓冲区的光标都会向前移动。您需要从程序中删除对nextLine()的调用,或者需要重新初始化您的扫描程序。
如果要输出文件内容(就像你看到的那样),只需执行以下操作:
System.out.println("File contents:");
while (in.hasNextLine()) {
System.out.println(in.nextLine());
}
in = new Scanner(new FileReader(dir + "/input5.txt"));
//now you can do your counting, as the buffer has been reset
答案 1 :(得分:1)
怎么样:
int count = 0;
while (in.hasNextLine())
count += in.nextLine().trim().split("\\s+").length;
如果出现分割中的正则表达式会消耗多个空格,无论间距如何都能为您提供正确的单词数。
对trim的调用会删除前导空格(如果存在)。
答案 2 :(得分:1)
您可以使用 -
public static int wordCount(String s) {
int counter = 0;
s = s.trim(); //edit
for (int i = 0; i <= s.length() - 1; i++) {
if (Character.isLetter(s.charAt(i))) {
counter++;
for (; i <= s.length() - 1; i++) {
if (s.charAt(i) == ' ') {
counter++;
}
}
}
}
return counter;
}