我正在尝试计算字符串在文件中出现的次数。我想找到“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();
}
}
答案 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();