Tester un string

mimi19911980 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
mimi19911980 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je teste la saisi si c'est un string et aussi non vide ,mais mais me si je rentre un entier il l'accepte je ne sais pas pour quoi quelqu'un peut m'aider svp

Merci



System.out.println("veuillez saisir nom du fournisseur");
chaine = clavier.nextLine();

while(fin==false) {
System.out.println("veuillez saisir nom du fournisseur");
chaine = clavier.nextLine();
for (int i = 0; i < chaine.length(); i++)
if (!(Character.isAlphabetic(chaine.charAt(i)))&& (chaine.length()==0)) {
fin=true;
}


} nomFournisseur[ctr] = chaine.toUpperCase();

A voir également:

3 réponses

Grimjohn
 
Bonjour,
Ceci repond peut etre a votre question, sinon soyez plus claire:
https://forums.commentcamarche.net/forum/affich-1989308-tester-si-un-string-est-un-entier#answers
0
Utilisateur anonyme
 
Bonjour

Imaginons que tu viennes à mon bureau. Je n’y suis pas mais tu trouves une feuille sur laquelle j’ai écrit 123. L’esprit humain que tu possèdes va de suite penser que c’est le nombre 123. Mais c’est une interprétation, factuellement, c’est du texte, puisqu’il est écrit sur une feuille et qu’un nombre est un concept.

Ensuite, tu vas commencer à émettre des hypothèses, par exemple que je suis peut-être parti au bureau 123. Ce qui signifie le bureau 23 de l’étage 1 dans mon entreprise. Du coup 123 n’est plus un nombre mais un code ou un nom.

Mais en vrai, j’étais au téléphone avec un client qui habite au 123 rue Machin, je commençais à noter son adresse, quand il a ajouté que c’est entre la station service Truc et la boulangerie Chose. Comme je voyais où cela se trouve j’ai arrêté de noter. Finalement 123 c’est un lieu, pas un nombre.

Et bien quand on tape au clavier, c’est comme quand on écrit, c’est du texte.
Et c’est l’interprétation ou le contexte qui donne une signification à ce texte.
L’ordinateur ne fait pas de supposition tout seul. C’est à toi de la coder.

Par exemple, si tu taper scanner.nextint, tu forces l’ordinateur à convertir le texte saisi en entier.
A l’inverse, le nom d’une société pourrait très bien être 123
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Vu ton code et en particulier la condition chaine.length()==0 qui sera toujours faux, il n'y a pas de raison qu'il accepte quoi que ce soit, tout sera faux.

En programmation il faut scinder ton travail, créer des méthodes intermédiaires pour chaque étape de ton raisonnement. Ici tu veux vérifier qu'une chaîne de caractères est alphabétique, alors créé une méthode pour ça, que tu pourras tester unitairement, en dehors du reste de ton programme.

Exemple :
public static boolean isAlphabetic(String chaine) {
    return chaine != null
            && !chaine.isBlank()
            && chaine.chars().allMatch(Character::isAlphabetic);
}

public static void main(String[] args) {
    System.out.println(isAlphabetic(null)); // false
    System.out.println(isAlphabetic("      ")); // false
    System.out.println(isAlphabetic("abcdef")); // true
    System.out.println(isAlphabetic("123456")); // false
    System.out.println(isAlphabetic("abc123")); // false
}

Sur le même principe de découpage, tu devrais créer une méthode spécifique à la lecture au clavier.
private static final Scanner clavier = new Scanner(System.in);

public static String nextAlphabetic(String label) {
    String result;
    do {
        System.out.println(label);
        result = clavier.nextLine();
    } while (!isAlphabetic(result));
    return result;
}

public static void main(String[] args) {
    String nomFournisseur = nextAlphabetic("Veuillez saisir le nom du fournisseur");
    System.out.println(nomFournisseur.toUpperCase());
}
0
mimi19911980 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup pour ton aide j'ai un autre problème;

j'ai une fonction ajouter j'ajoute le numéro d'item la description , le sexe, le prix.....ect
alors je fais des teste de validation pour chaque saisi.

le problème c'est que juste la première vérification qui marche je pense le problème est avec le Boolean fin= false
voici mon code je veux faire de telle sorte que si utilisateur fait une saisi erroné il doit refaire le teste de validation.


public static void ajouter(){
    boolean fin=false;
        String chaine;
        System.out.println("***TRACE procédure ajouter");


     System.out.println(" saisir   saisie num item");
        chaine=clavier.nextLine();
while(fin==false)
{
    System.out.println("   erreur saisie num item");
    chaine=clavier.nextLine();
    if(tousDesChiffres(chaine)&&(chaine.length()!=0)&&(localiser(chaine)<0)){
        fin=true;
        numItem[ctr]=Integer.parseInt(chaine);
    }

}
      

        System.out.println("veuiller saisir le prix de revient");
        chaine=clavier.nextLine();
        while(!verifierPrix(chaine)){
            System.out.println(" erreur veuillez resaisir le prix de revient ");
            chaine=clavier.nextLine();
            if(verifierPrix(chaine)){
                fin=true;
                prixReviens[ctr]=Double.parseDouble(chaine);
            }}




        System.out.println("veuillez saisir la quqntité  ");
        chaine=clavier.nextLine();
        while(!verifierQuqntite(chaine)){
        System.out.println(" erreur veuillez resaisir la quantite");
        chaine=clavier.nextLine();
        if(verifierQuqntite(chaine)){
            fin=true;
            quantite[ctr]=Integer.parseInt(chaine);
        }}


        System.out.println("veuillez saisir le nom du fournisseur");
        chaine= clavier.nextLine();
       while(!tousDesLettres(chaine)){
            System.out.println("veuillez saisir le nom du fournisseur");
            chaine= clavier.nextLine();
            if (tousDesLettres(chaine)  )
            fin=true;
                nomFournisseur[ctr] = (chaine.toUpperCase());



            }

 


        }






merci beaucoup
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > mimi19911980 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
Commence par appliquer les conseils que je t'ai donné cela t'évitera des bidouilles du genre fin=true, jamais dans un vrai programme Java on ne ferait comme ça...
0
mimi19911980 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
oui mais la j'ai un tp a faire le prof nous exige cette methode
0