计算一组字符在没有缓冲读取器的情况下出现的次数



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

AEIOU aeiou baeiboeu bbbaaaaaa beaeiou caeuoi ajejijoju aeiooaeiOu ma me mi mo mu拿出来!

我希望该方法随后返回它在文件中的次数。关于我如何做到这一点的任何想法? 问题是我想在不使用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();
  } 
}

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

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);

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

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

最新更新