2010-11-08 7 views
1

Mon programme devrait faire ce qui suit:Nombre de sous-chaînes au sein de la chaîne

  1. utilisateur entre une chaîne: Université des Cordillères
  2. utilisateur entre dans la sous-chaîne: er
  3. Sorties programme le nombre de sous-chaîne: 2 (Univ sité er du Cordill er comme)

je ne devrais pas utiliser .str, mais créer ma propre méthode.

+1

S'il vous plaît clarifier la question. Cela n'a aucun sens. – Feanor

+0

Les expressions régulières sont-elles autorisées? Quelles sont les exigences pour la méthode? Et qu'avez-vous déjà trouvé? Ce qui fonctionne? Qu'est-ce qui ne va pas? Devoirs? – soulseekah

+1

J'ai essayé de réécrire votre question, mais qu'est-ce que '.str'? –

Répondre

0
  1. Une chaîne est une séquence de char valeurs (comme un tableau)
  2. boucle à travers cette séquence et pour chaque char (sauf le dernier dans votre exemple):
    1. test, si ce omble chevalier est égal au premier caractère de votre modèle et si le prochain char est égal au deuxième caractère de votre modèle (adapter, si vous avez des modèles d'une taille différente)
    2. Si le résultat du test est true, incrémentez votre compteur.

Ceci est l'algorithme de base. Si vous avez cette opération en cours, pensez à des cas spéciaux, comme la chaîne source est vide ou plus courte que le modèle.

1

L'approche naïve (vérification de la sous-chaîne à chaque indice possible) passe dans O (nk)n est la longueur de la chaîne et k est la longueur de la sous-chaîne. Cela pourrait être implémenté avec une boucle for, et quelque chose comme haystack.substring(i).startsWith(needle).

Des algorithmes plus efficaces existent cependant. Vous pouvez jeter un oeil à la Knuth-Morris-Pratt algorithm, ou le Aho-Corasick algorithm. Par opposition à l'approche naïve, ces deux algorithmes se comportent bien aussi sur une entrée comme "Rechercher la sous-chaîne de 100 'X' dans une chaîne de 10000 'X.

1

Remplacez simplement la première occurrence et comptez jusqu'à ce qu'il n'y en ait plus

int count = 0; 
while (str.indexOf(subStr)>-1){ 
    str = str.replaceFirst(subStr, ""); 
    count++; 
} 
return count ; 
0

Voici mon code ....

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

Veuillez corriger votre mise en forme. Aussi, peut-être qu'une explication de la réponse serait utile. –

0

Algorithme:

étape 1: convertir mainstring au tableau de caractères

étape 2: convertir sous-chaîne de tableau de caractères

étape 3: comparer caractère deux tableaux par caractère

étape 4: Si au moins l'un des caractères du tableau de sous-chaînes ne correspond pas au tableau de caractères de la chaîne principale commence à partir du premier caractère du sous-réseau ng, mais continuez à avancer dans la chaîne principale

étape 5: Si tout le caractère de la sous-chaîne est mis en correspondance, incrémentez le compte et recommencez à partir de la première position de la sous-chaîne.

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

s'il vous plaît laissez-moi savoir si des questions sur ce programme, merci. –

0

en une ligne:

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