我的程序应该执行以下操作:
我不应该使用.str,而是创建我自己的方法。
答案 0 :(得分:1)
天真的方法(检查每个可能索引处的子字符串)在 O(nk)中运行,其中 n 是字符串的长度, k 是子串的长度。这可以通过for循环实现,类似haystack.substring(i).startsWith(needle)
。
虽然存在更高效的算法。您可能需要查看Knuth-Morris-Pratt algorithm或Aho-Corasick algorithm。与天真的方法相反,这两种算法在输入方面也表现良好,例如“在10000'X的字符串中查找100'X'的子字符串。
答案 1 :(得分:1)
只需替换第一个匹配项并计数,直到没有。
int count = 0;
while (str.indexOf(subStr)>-1){
str = str.replaceFirst(subStr, "");
count++;
}
return count ;
答案 2 :(得分:0)
char
值(如数组)true
,请递增计数器。这是基本算法。如果你已经启动并运行,请考虑特殊情况,例如源字符串为空或比模式更短。
答案 3 :(得分:0)
这是我的代码......
import java.util.Scanner;
public class occurrenceOf_Substring {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println(" Enter a string");
String str=input.nextLine();
System.out.println(" Enter a substring");
String substring=input.nextLine();
int l=substring.length();
int count=0;
int index=str.indexOf(substring); // To find first occurrence
while(index<str.length() && index != -1)
{
index=str.indexOf(substring,index+l);/// to find next occurrences
count=count+1;
}
System.out.println("substrin count is "+count);
} }
答案 4 :(得分:0)
算法:
第1步:将mainstring转换为字符数组
第2步:将子字符串转换为字符数组
步骤3:逐个字符地比较两个数组
步骤4:如果子串数组中的至少一个字符与mainstring字符数组不匹配,则从子字符串的第一个字符开始,但继续在主字符串中移动
步骤5:如果子串的所有字符都匹配,则递增计数并再次从子串的第一个位置开始。
import java.io.*;
import java.util.Scanner;
public class SubStringCount {
public static void main(String[] args) throws IOException {
Scanner input=new Scanner(System.in);
System.out.println("Enter you Main string:");
String mainstring=input.nextLine();
System.out.println("Enter the substring");
String substring=input.nextLine();
int i=0;int j=0;
char[] str=mainstring.toCharArray(); // converting main string to character array
char[] sub=substring.toCharArray(); // converting substring to character array
int count=0;
while(i<str.length)
{
if(str[i]==sub[j])
{
j++;
}
else
{
j=0;
}
if(j==sub.length)
{
j=0;
count++;
}
i++;
}
答案 5 :(得分:0)
在一行中:
int count = (str.length() - str.replace(subStr, "").length()) / subStr.length();
答案 6 :(得分:-1)
另一种可能是:使用split("sep", -1)
,则数组长度为(-1)。
示例:
String input = "@human@mail@@com@";
String search = "@";
int occurrences = input.split(search, -1).length - 1;
说明: split
用给定的分隔符(regex)分隔输入字符串。因此,它返回一个带有分隔符之间的子字符串的数组。第二个参数-1
告诉split不以任何方式限制数组长度。如果将split与默认限制(0)一起使用,则尾随的空字符串将被丢弃(如果要搜索的字符串位于末尾,则->错误的结果)。因此,为了最终获得搜索字符串的出现次数,必须将数组长度减少1。