Caractère vide dans chaine JAVA

Fermé
Toma421 - 14 déc. 2011 à 12:31
 Toma421 - 14 déc. 2011 à 20:58
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

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
14 déc. 2011 à 12:58
Tu peux regarder indexOf, si ça te renvoie -1 c'est que le caractère n'est pas dans la chaîne.
0
Quel serait le code dans ce cas là ? car il y a plusieurs options pour le IndexOf ..
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
14 déc. 2011 à 13:14
Si j'ai bien compris cela devrait être :
if (mot.indexOf(lettreMot3)==-1)
0
Effectivement, cela me semble très correct et très logique ...
... mais ça ne marche pas .. !
snif merci quand même
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
14 déc. 2011 à 13:33
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
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 14/12/2011 à 14:06
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
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
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
14 déc. 2011 à 20:18
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