我是一名新的 Java 程序员。我正在尝试从用户输入的字符串中进行搜索,以查找特定字符出现的次数。
它并没有完全达到我想要的效果,因为它似乎显示从字符第一次出现开始的字符数。对于这个项目,我需要使用 .indexOf()
这是我的代码。
import java.util.Scanner;
public class SearchingStrings {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter the string to test > ");
String stringToTest = input.nextLine();
System.out.println("Please enter the letter to count >");
String letterToCount = input.nextLine();
// first position found
int positionOfLetter = stringToTest.indexOf(letterToCount);;
if (positionOfLetter != -1) {
int countNumberOfLetters = 1;
for (int i = positionOfLetter + 1; i < stringToTest.length() - 1; i++) {
positionOfLetter = stringToTest.substring(positionOfLetter, stringToTest.length()).indexOf(letterToCount);
if (positionOfLetter != -1) {
countNumberOfLetters++;
}
}
System.out.println("Number of letters found: " + countNumberOfLetters);
} else {
System.out.println("Your letter " + letterToCount + " was not found in the string!");
}
}
}
最佳答案
使用substring
创建一个新的字符串进行搜索除了效率低之外,这里非常困惑。 indexOf
有 version它接受一个索引来开始搜索。这更有效,因为它不会复制部分字符串并大大简化了您的代码。例如
int positionOfLetter = stringToTest.indexOf(letterToCount);
int countNumberOfLetters = 0;
while (positionOfLetter != -1) {
countNumberOfLetters++;
positionOfLetter = stringToTest.indexOf(letterToCount, positionOfLetter + 1);
}
System.out.println("Number of letters found: " + countNumberOfLetters);
indexOf
的第二个参数是起始索引。请注意+1
,否则它将再次找到相同的字符并且永远不会跳出循环。
关于Java 字符串统计字母出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43747389/