Caractère vide dans chaine JAVA

[Fermé]
Signaler
-
 Toma421 -
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

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Tu peux regarder indexOf, si ça te renvoie -1 c'est que le caractère n'est pas dans la chaîne.
Quel serait le code dans ce cas là ? car il y a plusieurs options pour le IndexOf ..
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
Si j'ai bien compris cela devrait être :
if (mot.indexOf(lettreMot3)==-1)
Effectivement, cela me semble très correct et très logique ...
... mais ça ne marche pas .. !
snif merci quand même
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.
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
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");
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 ..
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 879
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);
et du coup je devrait le mettre où ce bout de code ?