如何查找文本文件中出现的字母数?

时间:2014-01-03 02:45:49

标签: java file-io

我正在为学校创建一个名为“Book”的程序,我有很多麻烦。 IM支持找出字符“a”在txt文件中出现的次数。 txt文件读取以下内容“去洗手间 他说 他是对的 我需要去洗手间“。这是我的代码,但它似乎根本无法工作,我被卡住了。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Book 
{

public static void main(String[] args)  throws FileNotFoundException
{

    Scanner text = new Scanner (new File("data.txt"));
    String word = null;
    int count = 0;
    while(text.hasNextLine())
    {
        word = text.nextLine();
        for (int i = 0; i < word.length(); i++)
        {
            if (word.substring(i) == "a")
            {
                count++;
            }
        }

    }


    System.out.print(count);
}
}

4 个答案:

答案 0 :(得分:2)

带有一个参数的substring返回一个以给定索引开头的子字符串。此外,您通常不使用==来比较Java中的字符串。

你需要在a附近使用单引号使其成为字符常量,并使用charAt来获取字符串的特定字符,如下所示:

if (word.charAt(i) == 'a')

答案 1 :(得分:0)

我认为你正在寻找charAt()功能。 substring()返回一个String,但你真的想要一个Character。注意:字符用单引号'

表示
if (word.charAt(i) == 'a')

答案 2 :(得分:0)

word.substring(i)返回String,当与==进行等式检查时,操作数中的String个对象会根据它们在内存中的位置进行比较,而不是他们的价值观。

此外,word.substring(i)将返回从i开始的整个字符串,而不是i处的字符。要仅返回字符,您还需要指定结束索引。 (见docs

如果您替换

,这可能会有效
if (word.substring(i) == "a")

if (word.substring(i, i+1).equals("a"))

答案 3 :(得分:0)

您正在逐行阅读文本文件 您可以使用FileInputStream从文件中读取char。 这是一个给出的例子。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class Main {
  public static void main(String[] args) {
    File file = new File("data.txt");
    if (!file.exists()) {
      System.out.println(args[0] + " does not exist.");
      return;
    }

    try {
      FileInputStream fis = new FileInputStream(file);
      char current;
      int count = 0;
      while (fis.available() > 0) {
        current = (char) fis.read();
        if (current == 'a') {
              count++;
         }
      }
      System.out.println(count);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

在这里,您可以迭代文件的每个字符而不是行。 希望这会对你有所帮助。