我是一名新的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!");
}
}
}
答案 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。