计数子的

我的程序应做到以下几点:

  1. 用户输入的字符串:山脉大学
  2. 用户输入的字符串:呃
  3. 程序输出的子数:2 (大学减到了Cordill 作为)

我不应该使用名为.str,但创建自己的方法。

计数子的<p>我的程序应做到以下几点:</p> <ol> <li>用户输入的字符串:山脉大学</li> <li>用户输入的字符串:呃</li> <li>程序输出的子数:2 (大学<b>呃</b>减到了Cordill <b>呃</b>作为)</li> </ol> <p>我不应该使用名为.str,但创建自己的方法。</p>

问题描述:

+1

请澄清的问题。这没有任何意义。 – Feanor 2010-11-08 07:06:21

+0

是否允许正则表达式?该方法的要求是什么?你已经想出了什么?什么工作?什么不?家庭作业? – soulseekah 2010-11-08 07:10:50

+1

我试图重写你的问题,但'.str'是什么? – 2010-11-08 07:12:49

  1. 字符串是char值(在您的示例除了最后)的序列(如阵列)
  2. 遍历该序列并为每一个字符:
    1. 测试,如果炭等于你的模式的第一个字符,如果下一个字符等于你的模式的第二个字符(适应,如果你有不同大小的模式)
    2. 如果测试结果是true,增加你的计数器。

这是基本算法。如果你已经启动并运行了,请考虑一些特殊情况,例如源字符串为空或模式较短。

简易方法(在每一个可能的索引检查子串)运行在O(NK)其中Ñ是字符串的长度和ķ是子串的长度。这可以通过一个for循环来实现,例如haystack.substring(i).startsWith(needle)

尽管存在更高效的算法。您可能需要查看Knuth-Morris-Pratt algorithmAho-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); 
} } 
+0

请修复您的格式。另外,也许对答案的解释是有用的。 – 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++; 

    } 
+0

请让我知道如果有关于这个程序的任何问题,谢谢。 – 2013-12-26 09:14:21

在一个行:

int count = (str.length() - str.replace(subStr, "").length())/subStr.length();