Tester un string

Fermé
mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 - Modifié le 24 nov. 2020 à 05:41
mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 - 25 nov. 2020 à 13:57
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

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
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
24 nov. 2020 à 08:32
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
24 nov. 2020 à 08:46
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 mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021
Modifié le 27 nov. 2020 à 09:12
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > mimi19911980 Messages postés 22 Date d'inscription mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021
25 nov. 2020 à 07:47
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 mardi 10 novembre 2020 Statut Membre Dernière intervention 14 octobre 2021 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
25 nov. 2020 à 13:57
oui mais la j'ai un tp a faire le prof nous exige cette methode
0