Java字符串计数字母出现

时间:2017-05-02 21:17:09

标签: 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!");
    }
}
}

7 个答案:

答案 0 :(得分:3)

你几乎在那里,而不是for循环,你可以使用do..while循环来达到这个目的,例如:

String s = "test test1 test2";
String letter = "t";
int index = -1, count = 0;
do{
    index = s.indexOf(letter);
    if(index != -1){
        count++;
        s = s.substring(index + 1);
    }
}while(index != -1);

System.out.println(count);

答案 1 :(得分:3)

除了效率低下之外,使用substring来创建要搜索的新String非常混乱。 indexOf有一个version,它接受​​一个开始搜索的索引。这样更有效率,因为它不会复制部分字符串并简化您的代码。 E.g。

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否则它将再次找到相同的char并且永远不会脱离循环。

答案 2 :(得分:1)

Matcher m = Pattern.compile(letterToCount).matcher(input);
int count = 0;
while (m.find()) {
    count++;
}

也应该这样做。

答案 3 :(得分:1)

计算出现次数的一种厚颜无耻的方法是删除所有出现次数,并将结果字符串的长度与原始字符串进行比较:

String removed = stringToTest.replace(letterToCount, "");
int numOccurrences =
    (stringToTest.length() - removed.length()) / letterToCount.length();

答案 4 :(得分:0)

自从你写完以来,你似乎需要使用indexOf而不是你的家庭作业问题。如果您的目的是计算特定的字母,您可以执行以下操作。

int counter=0;
    for(int i=0; i<stringToTest.length();i++){
        if(stringToTest.charAt(i).equals(letterToCount)){
            System.out.println(letterToCount+" appears in "+ i +");
            counter++;
        }
    }
    System.out.println(letterToCount+" appeared "+counter+" times");

此代码只是遍历stringToTest的每个字符,并检查它是否等于您想要的字母。 indexOf()是不必要的

答案 5 :(得分:0)

你可以简单地做到这一点:

int count = stringToTest.replaceAll(letterToCount, "##").length() - stringToTest.length();

答案 6 :(得分:0)

我总是喜欢使用分裂。

longString.split(subStringToCount).length - 1

所以在

的情况下
String longString = "test string with spaces";
String subStringToCount = " ";

return longString.split(subStringToCount).length - 1;

你会得到3。