Caractère vide dans chaine JAVA

Bonjour,

Dans mon code en JAVA, j'ai un String mot , et le la variable char lettreMot3 correspondant au carctère i+3 de ce mot.

Je voudrait faire un traitement en vérifiant si et y compris lettreMot3 est un caractère non-existant dans ma chaine.
Toute ces solutions ne fonctionnent pas :

if ( lettreMot3 == '' )
if ( lettreMot3 == ' ' )
if ( lettreMot3 == "" )
if ( lettreMot3 == " " )
if ( lettreMot3 == 0 )
if ( lettreMot3 == '\0' )


Comment faire ? Merci de m'aider ...

4 réponses

  1. Modérateur
    Tu peux regarder indexOf, si ça te renvoie -1 c'est que le caractère n'est pas dans la chaîne.
    0
    1. Quel serait le code dans ce cas là ? car il y a plusieurs options pour le IndexOf ..
      0
      1. Modérateur
        Si j'ai bien compris cela devrait être :
        if (mot.indexOf(lettreMot3)==-1)
        0
        1. Effectivement, cela me semble très correct et très logique ...
          ... mais ça ne marche pas .. !
          snif merci quand même
          0
          1. Modérateur
            Montre nous ton code de manière à voir ce qui ne va pas, et ré-explique aussi ce que tu veux faire avec quelques exemples représentatif (ceux qui marchent, ceux qui ne marchent pas, ceux qui ne marchent pas mais qui devraient marcher ...)
            0
          2. Enoncé : Remplacer, sauf si ils sont suivis par une voyelle ou 1, 2 ou 4 :
            - an par 1
            - am par 1
            - en par 1
            - em par 1

            Conctat : Tout marche nickel, les deux lettres se remplacent bien à chaque fois , SAUF lorsque le mot écrit se TERMINE par "an" , "am" , "en" , "em".
            Dans ce cas là, les lettres ne sont pas remplcé par 1 , comme cela devrait être !

            Code :
            
            public static void main(String[] args) {
                    
                    String mot = Clavier.lireString();  
                    int longueur = mot.length();
            
                    for (int i = 0 ; i < longueur -2 ; i++)
                    {
                        char lettreMot = mot.charAt(i);
                        char lettreMot2 = mot.charAt(i+1);
                        char lettreMot3 = mot.charAt(i+2);
            
                        if ( lettreMot == 'a' || lettreMot == 'e' )
                        {
                            if ( lettreMot2 == 'm' || lettreMot2 == 'n' ) 
                            {
                                if ( lettreMot3 != 'a' && lettreMot3 != 'e' && lettreMot3 != 'i' && lettreMot3 != 'o' && lettreMot3 != 'u' && lettreMot3 != 'y' && lettreMot3 != '1' && lettreMot3 != '2' && lettreMot3 != '4' || mot.indexOf(lettreMot3) == -1 )
                                {
                                    StringBuffer motDeTravail;
                                    motDeTravail = new StringBuffer(mot);
                                    motDeTravail.replace (i, i+2, "1");
                                    mot = new String(motDeTravail);
                                    longueur = mot.length();
                                }	
                            }
                       }
            System.out.println(mot); 
            } 
            
            
            


            Merci.
            0
          3. Modérateur
            Tu peux peut-être gérer ce dernier cas comme ceci :

            for (int i = 0 ; i <= longueur-2 ; i++) // inférieur ou égal 
            { 
                // si lettreMot3 est après le dernier caractère on lui affecte arbitrairement un caractère dont on est sûr qu'il sera remplacé par l'algorithme 
                char lettreMot3 = (i==longueur-2) ? '¤' : mot.charAt(i+2); 
            

            Quelque chose de bizarre dans ton code c'est ton motDeTravail... tu peux faire directement
            mot = mot.replace(i,i+2,"1");
            0
          4. En ce qui concerne le "motDeTravail" qui est un StringBuffer, cela marche très bien , mais ça n'aurait pas fonctionné avec un mot.replace dans ce cas là car cela est dans un IF et cette syntaxe ne s'occupe pas d'éventuelles conditions.
            (c'est le but justement de mon TP).

            Par contre, pour ta syntaxe avec le la'interrogation, cela me parait un peu bizarre ..
            0
          5. Modérateur
            La syntaxe avec un point d'interrogation s'appelle un opérateur ternaire.
            Ces deux codes sont identiques :

            char lettreMot3 = (i==longueur-2) ? '¤' : mot.charAt(i+2);
            
            char lettreMot3;
            if (i==longueur-2)
                lettreMot3 = '¤';
            else
                lettreMot3 = mot.charAt(i+2);
            0