获取另一个字符串中一个字符串的出现次数

我需要输入两个字符串,第一个是任何单词,第二个字符串是前一个字符串的一部分,我需要输出第二个字符串出现的次数。 例如:String 1 = CATSATONTHEMAT String 2 = AT。 输出为3,因为AT在CATSATONTHEMAT中出现三次。 这是我的代码:

public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word8 = sc.next(); String word9 = sc.next(); int occurences = word8.indexOf(word9); System.out.println(occurences); } 

当我使用此代码时,它输出1

你也可以尝试:

 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word8 = sc.nextLine(); String word9 = sc.nextLine(); int index = word8.indexOf(word9); sc.close(); int occurrences = 0; while (index != -1) { occurrences++; word8 = word8.substring(index + 1); index = word8.indexOf(word9); } System.out.println("No of " + word9 + " in the input is : " + occurrences); } 

有趣的解决方案:

 public static int countOccurrences(String main, String sub) { return (main.length() - main.replace(sub, "").length()) / sub.length(); } 

基本上我们在这里做的是从删除main所有sub实例的字符串长度中减去main的长度 – 然后我们将这个数字除以sub的长度,以确定删除了多少次sub ,给出我们的答案。

所以最后你会得到这样的东西:

 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word8 = sc.next(); String word9 = sc.next(); int occurrences = countOccurrences(word8, word9); System.out.println(occurrences); sc.close(); } 

为什么没有人发布最明显和最快速的解决方案?

 int occurrences(String str, String substr) { int occurrences = 0; int index = str.indexOf(substr); while (index != -1) { occurrences++; index = str.indexOf(substr, index + 1); } return occurrences; } 

另外一个选项:

 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word8 = sc.next(); String word9 = sc.next(); int occurences = word8.split(word9).length; if (word8.startsWith(word9)) occurences++; if (word8.endsWith(word9)) occurences++; System.out.println(occurences); sc.close(); } 

startsWithendsWith是必需的,因为split()省略了尾随空字符串。