Java 字符串计数字母出现次数
Java String count letter occurrences
我是一名新 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!");
}
}
}
你快完成了,而不是 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);
使用 substring
创建一个新的 String 进行搜索除了效率低下之外,这里非常混乱。 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
否则它会再次找到相同的字符并且永远不会跳出循环。
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");
此代码简单地遍历 stringToTest 的每个字符并检查它是否等于您想要的字母。 indexOf() 是不必要的
计算出现次数的一种厚颜无耻的方法是删除所有出现的地方,并将结果字符串的长度与原始字符串进行比较:
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 个。
我是一名新 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!");
}
}
}
你快完成了,而不是 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);
使用 substring
创建一个新的 String 进行搜索除了效率低下之外,这里非常混乱。 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
否则它会再次找到相同的字符并且永远不会跳出循环。
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");
此代码简单地遍历 stringToTest 的每个字符并检查它是否等于您想要的字母。 indexOf() 是不必要的
计算出现次数的一种厚颜无耻的方法是删除所有出现的地方,并将结果字符串的长度与原始字符串进行比较:
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 个。