Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串计数字母出现次数_Java_String_Count_Indexof - Fatal编程技术网

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

Java字符串计数字母出现次数,java,string,count,indexof,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);

我是一名新的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!");
    }
}
}
import java.util.Scanner;
公共类搜索字符串{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“请输入要测试的字符串>”;
字符串stringToTest=input.nextLine();
System.out.println(“请输入要计数的字母>”;
String letttocount=input.nextLine();
//找到的第一个位置
字母的内部位置=stringToTest.indexOf(字母计数);;
if(字母的位置!=-1){
int countNumberOfLetters=1;
对于(int i=字母位置+1;i
您就快到了,您可以使用
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);

使用
substring
创建一个新的字符串进行搜索,除了效率低下之外,在这里是相当混乱的
indexOf
具有接受开始搜索的索引的。这更有效,因为它不会复制字符串的一部分,并大大简化了代码。例如

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
,否则它将再次找到相同的字符,并且永远不会跳出循环

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

也应该这样做。

似乎是一个家庭作业问题,因为你写了你需要使用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");
int计数器=0;

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

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

您可以简单地执行以下操作:

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

我一直喜欢用split

longString.split(subStringToCount).length - 1
那么在

String longString = "test string with spaces";
String subStringToCount = " ";

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

您将得到3。

谢谢您的及时回复!谢谢,我没有想到这一点。