计算一组字符在没有BufferedReader的文件中出现的次数

时间:2017-01-18 15:16:24

标签: java file-io

我正在尝试计算字符串在文件中出现的次数。我想找到“A,E,I,O,U”按顺序出现的次数。这是文本文件:

AEIOU aeiou baeiboeu bbbaaaaaa beaeiou caeuoi ajejijoju aeioo
aeiOu ma me mi mo mu
take it OUT!

我希望该方法返回它在文件中的次数。关于如何做到这一点的任何想法?我想在不使用BufferedReader的情况下执行此操作。我只需使用Scanner读取文件即可。有没有办法做到这一点?

我编辑了这个并添加了我到目前为止的代码。我认为我甚至不亲近。我很确定我需要使用一些嵌套循环来实现这一点。

import java.util.*;
import java.io.*;

public class AEIOUCounter 
{  
  public static final String DELIM = "\t";

  public static void main(String[] args) 
  { 
    File filename = new File("aeiou.txt");

    try
    {
      Scanner fileScanner = new Scanner(new File(filename));

      while(fileScanner.hasNextLine())
      {
        System.out.println(fileScanner.nextLine());
      }
    }
    catch(IOException e)
    {
      System.out.println(e); 
    }
    catch(Exception e)
    {
      System.out.println(e); 
    }
    fileScanner.close();
  } 
}

2 个答案:

答案 0 :(得分:1)

您现在正在做的是打印文件中的所有行。

fileScanner.hasNextLine()
fileScanner.nextLine()

但是你要找的是在文件中过滤掉单独的单词:

Path path = Paths.get("/path/to/file");
Scanner sc = new Scanner(path);

int counter = 0;
while (sc.hasNext()) {
    String word = sc.next();
    if (word.equalsIgnoreCase("AEIOU")) {
        counter += 1;
    }
}
System.out.print("Number of words: " + counter);

答案 1 :(得分:1)

Smurf的答案很棒。值得一提的是,如果你正在使用Java 8,你可以完全避免使用Scanner,并在一个表达式中执行此操作:

long count =  Files.lines(Paths.get("aeiou.txt"))
                   .flatMap(s -> Arrays.stream(s.split(" ")))
                   .filter(s -> s.equalsIgnoreCase("aeiou"))
                   .count();