Vérifier si une chaîne en contient une autre

Résolu
Evil Jajuka -  
 Psyko -
Bonjour,

Voila j'ai un problème avec l'un des exercices que je doit faire. Je met l'énoncé pour faire plus simple :

Écrivez une méthode qui prend en paramètre deux chaînes de caractères et qui retourne true si la deuxième
chaîne se retrouve complètement dans la première mais sans nécessairement que les caractères s'y
retrouvent de façon consécutive. Exemple : La méthode appliquée à
"Le manteau est en vison" et "maison" retournera true,
"Rien ne sert de courir, il faut partir à point" et "Rester" retournera true
"Plus on mange, moins on a faim" et "repas" retournera false.

Voici le code que j'ai écrit :
static boolean contient(String msg, String msg2)
{
        boolean contient = false;
        for (int i = 0; i < msg2.length() - 1; i++) 
        {
            if (msg.indexOf(msg2.charAt(0)) != -1)
           {
                if (msg.indexOf(msg2.charAt(i)) < msg.indexOf(msg2.charAt(i + 1)))
                {
                    contient = true;
                }
            }
        }
        return contient;
}


Le problème c'est que ma chaîne me renvoie toujours true, sauf lorsque le premier caractère de la deuxième chaine ne fait pas parti de la première chaîne. Si quelqu'un pourrait m'aider.

Merci

6 réponses

  1. Utilisateur anonyme
     
    Il y a beaucoup plus simple !
    substr_count("chaine","chainerecherchee") renvoie le nombre d'occurrence de la chaine recherchée...
    6
    1. Utilisateur anonyme
       
      Oups, je parlais pour php...
      0
    2. Yamuto
       
      Lol
      0
  2. Psyk974 Messages postés 559 Statut Membre 51
     
    static boolean contient(String msg, String msg2)
    {
        boolean contenu_dans = true;
    	boolean trouve_lettre = false;
    	int j = 0;
    	int dernier_index = -1;
            for (int i = 0; i < msg2.length() - 1; i++) 
            {
    			j = 0;
    			trouve_lettre = false;
    			for (int j = 0; j < msg.length() - 1; j++) 
    			{
    				if (msg2.charAt(i) == msg.charAt(j))
    				{
    				    if (j > dernier_index) {
    				        trouve_lettre = true;
    					dernier_index = j;
                                            break;
    			            }
    				}
    			}
    			if (trouve_lettre == false)
    			{
    				contenu_dans = false;
    			}
            }
            return contenu_dans;
    }


    Rajouter un break dans la deuxième boucle et ça marche ! Excuse moi
    5
  3. Evil Jajuka
     
    Désolé, j'ai oublier de spécifier que le code est en Java...
    2
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      Salut,

      Bon je m'y connais pas trop en JAVA mais je te donne ça quand même à essayer. S'il y a des erreurs de syntaxe je te laisse le soin de corriger :)

      static boolean contient(String msg, String msg2)
      {
              boolean contenu_dans = true;
      	boolean trouve_lettre = false;
      	int j = 0;
              for (int i = 0; i < msg2.length() - 1; i++) 
              {
      			j = 0;
      			trouve_lettre = false;
      			for (int j = 0; j < msg.length() - 1; j++) 
      			{
      				if (msg2.charAt(i) == msg.charAt(j))
      				{
      				    trouve_lettre = true;
      				}
      			}
      			if (trouve_lettre == false)
      			{
      				contenu_dans = false;
      			}
              }
              return contenu_dans;
      }


      0
      1. Evil Jajuka > Psyk974 Messages postés 559 Statut Membre
         
        Merci pour l'aide, mais le code que tu m'a donné retourne true même si les caractères se retrouve dans la chaîne dans un ordre quelconque, mais il faudrait qu'il retourne true seulement si les lettres sont dans le bon ordre.

        Exemple :
        "Le manteau est en vison" et "maison" retournera true,
        "Le manteau est en vison" et "nosiv" retournera false (nosiv = vison à l'envers)
        0
      2. Psyk974 Messages postés 559 Statut Membre 51 > Evil Jajuka
         
        Ahhh ok mais j'avais pas compris qu'il fallait que les lettres soient dans l'ordre.
        Je regarde ce que je peux faire et je te tiens au courant
        0
    2. Psyko
       
      Ah oui tu fais bien de preciser que c'est du Java parce que sinon i y avait plein de solution ^^
      Exemple en excel
      http://blog.yvoz.net/2010/09/excel-tester-chaine-caracteres-contient/
      , en sql
      http://msdn.microsoft.com/fr-fr/library/ms187787.aspx 
      etc etc...
      0
  4. Psyk974 Messages postés 559 Statut Membre 51
     
    Essaye ça et oublie toujours pas de corriger mes erreurs éventuelles de syntaxes lol

    static boolean contient(String msg, String msg2)
    {
        boolean contenu_dans = true;
    	boolean trouve_lettre = false;
    	int j = 0;
    	int dernier_index = -1;
            for (int i = 0; i < msg2.length() - 1; i++) 
            {
    			j = 0;
    			trouve_lettre = false;
    			for (int j = 0; j < msg.length() - 1; j++) 
    			{
    				if (msg2.charAt(i) == msg.charAt(j))
    				{
    				    if (j > dernier_index) {
    				    trouve_lettre = true;
    					dernier_index = j;
    					}
    				}
    			}
    			if (trouve_lettre == false)
    			{
    				contenu_dans = false;
    			}
            }
            return contenu_dans;
    }

    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Evil Jajuka
     
    Merci Psyk974, ça marche parfaitement :)
    0
    1. Psyk974 Messages postés 559 Statut Membre 51
       
      Ok cool, met un résolu alors :)
      0
  7. soniabenbey
     
    Bonjour,

    j'ai essai cette code mais j'ai un problème que la chaîne se retrouve complètement dans la première mais nécessairement que les caractères s'y retrouvent de façon consécutive.

    Merci d'avance :)
    0