计算某个字母的数字会出现在ArrayList中的一系列字符串中

我有一个ArrayList,以“做菜”的forms存储笔记(字符串)。 我有一个注释类,其中包含一个方法,该方法应该遍历ArrayList中的所有注释并计算某个字母出现的次数。 这是我到目前为止所写的方法:

public int countNumberOf(String letter) { int count = 0; for (int i = 0; i < notes.size(); i++) { String note = (notes.get(i)); for (int j = 0; i < note.length(); i++) { String letterTemp = note.substring(i, i); if (letterTemp.equalsIgnoreCase(letter)) { count++; } } } return count; } 

但是,当我运行程序时,即使我知道它出现在ArrayList中,我也会看到字母“a”出现的次数为零。 我究竟做错了什么?

您可以随时访问和比较字符,而不是将String传递给方法并执行substring ,例如:

 public int countNumberOf(char letter) { ... String letterTemp = note.charAt(i); if (letter == letterTemp) { count++; } 

另一个例子:

 public static int countOccurrences(String text, char character) { int count = 0; for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == character) { count++; } } return count; } 

note.substring(i, i)将始终返回一个空字符串,因此letterTemp.equalsIgnoreCase(letter)将始终返回false 。 你应该使用note.substring(i, i+letter.length())

虽然我建议您使用char进行比较,但是在这种任务中。 主要是为了简单起见,并避免不必要的中间字符串。 逻辑是一样的

你的第二个for循环似乎不正确。

 for (int i = 0; i < notes.size(); i++) { String note = (notes.get(i)); for (int j = 0; i < note.length(); i++) { 

注意那些索引变量ij

怎么样:

 int countOfLetter = note.length() - (note.replace(letter,"")).length();