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);
}
}
答案 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();
}
}
}
在这里,您可以迭代文件的每个字符而不是行。 希望这会对你有所帮助。