Java字符串计数字母出现次数
我是一名新的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);
.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。谢谢您的及时回复!谢谢,我没有想到这一点。