Java 字符串统计字母出现次数

标签 java string count indexof

我是一名新的 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创建一个新的字符串进行搜索除了效率低之外,这里非常困惑。 indexOfversion它接受一个索引来开始搜索。这更有效,因为它不会复制部分字符串并大大简化了您的代码。例如

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/

相关文章:

char *cQuery 追加字符串

带有计数和分组依据的 MySQL 查询

java - 没有链接的gradle项目

java - starttls+smtp 与 SMTP over SSL 是否相同?

android - Long.getLong() 失败,将 null 返回到有效字符串

string - MATLAB 字符串中的换行符

MySQL:计算员工数量

swift - Swift 中 for 循环内的加法或减法

java - 堆栈溢出错误与无限循环

java - 使用 Quartz 在 Java 中进行异步调度