我是一个新的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!");
}
}
}
发布于 2017-05-03 05:25:37
除了效率低下之外,使用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
,否则它将再次找到相同的字符,并且永远不会跳出循环。
发布于 2017-05-03 05:22:06
您就快到了,您可以使用do..while
循环来实现,而不是for
循环,例如:
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);
发布于 2017-05-03 05:26:32
Matcher m = Pattern.compile(letterToCount).matcher(input);
int count = 0;
while (m.find()) {
count++;
}
应该也能做到这一点。
https://stackoverflow.com/questions/43747389
复制相似问题