计数子的
我的程序应做到以下几点:
- 用户输入的字符串:山脉大学
- 用户输入的字符串:呃
- 程序输出的子数:2 (大学呃减到了Cordill 呃作为)
我不应该使用名为.str,但创建自己的方法。
- 字符串是
char
值(在您的示例除了最后)的序列(如阵列) - 遍历该序列并为每一个字符:
- 测试,如果此炭等于你的模式的第一个字符,如果下一个字符等于你的模式的第二个字符(适应,如果你有不同大小的模式)
- 如果测试结果是
true
,增加你的计数器。
这是基本算法。如果你已经启动并运行了,请考虑一些特殊情况,例如源字符串为空或模式较短。
简易方法(在每一个可能的索引检查子串)运行在O(NK)其中Ñ是字符串的长度和ķ是子串的长度。这可以通过一个for循环来实现,例如haystack.substring(i).startsWith(needle)
。
尽管存在更高效的算法。您可能需要查看Knuth-Morris-Pratt algorithm或Aho-Corasick algorithm。与天真的方法相反,这两种算法在输入方面也表现良好,例如“在10000个X的字符串中查找100个X的子串”。
只需替换第一个匹配项并计数直到没有
int count = 0;
while (str.indexOf(subStr)>-1){
str = str.replaceFirst(subStr, "");
count++;
}
return count ;
这是我的代码....
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);
} }
请修复您的格式。另外,也许对答案的解释是有用的。 – 2013-12-24 18:41:18
算法:
步骤1:转化mainstring到字符数组
步骤2:转换字符串到字符数组
步骤3:由字符比较两个数组字符
步骤4:如果至少有一个子字符串数组中的字符与主字符串数组不匹配,则从substri的第一个字符开始ng,但继续在主字符串中移动
第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++;
}
请让我知道如果有关于这个程序的任何问题,谢谢。 – 2013-12-26 09:14:21
在一个行:
int count = (str.length() - str.replace(subStr, "").length())/subStr.length();
请澄清的问题。这没有任何意义。 – Feanor 2010-11-08 07:06:21
是否允许正则表达式?该方法的要求是什么?你已经想出了什么?什么工作?什么不?家庭作业? – soulseekah 2010-11-08 07:10:50
我试图重写你的问题,但'.str'是什么? – 2010-11-08 07:12:49