1
votes

Validation d'entrée Java supplémentaire pour les chaînes

Je veux faire cela pour que les entrées courtes puissent toujours être détectées, telles que "Londo" et "Lon", mais je veux le garder petit et l'utiliser sans copier et coller le code, des conseils? merci.

if (Menu.answer1.equals("London"))
        {
         if (location.equals("London")) {
             System.out.print(location + " ");
             System.out.print(date + " ");
             System.out.print(degrees + "C ");
             System.out.print(wind + "MPH ");
             System.out.print(winddirection + " ");
             System.out.print(weather + " ");
             System.out.println("");
         }


1 commentaires

Lonely doit-il être traité comme Londres ?


5 Réponses :


3
votes

Vous pouvez utiliser startsWith ()

String city = "London";
if (city.startsWith("Lon")) {
    // do something
}


1 commentaires

Pour dire l'évidence: seul, (1) qui permet à l'utilisateur de taper Lonxxxxxx et d'obtenir des données de Londres, et (2) si jamais vous avez besoin d'ajouter une ville nommée "Lonsomethingelse", vous devrez ajuster votre code.



1
votes

De plus, si vous avez besoin de vérifier une sous-chaîne, vous pouvez utiliser la méthode contains :

Menu.answer1 = "London";
Menu.answer1.contains("ondo"); // true


1 commentaires

d'accord, beau concept cependant, je l'aime bien.



0
votes

Si vous voulez vérifier par rapport à un ensemble fixe d'alternatives, vous pouvez utiliser une liste d'entrées valides en utilisant contains:

List<String> londonNames = Arrays.asList("London", "Londo", "Lon");
if (londonNames.contains(Menu.answer1)) {
 ...
}


0 commentaires

0
votes

Vous pouvez utiliser ( insensible à la casse ) regex pour faire de même, par exemple:

(?) Lon [az] {0,3}

  • (?) = insensibilité à la casse
  • Lon = 3 premiers caractères
  • [a-z] {0,3} = n'importe quel nombre d'alphabets entre 0 et 3

Voici un exemple:

String regex = "(?)Lon[a-z]{0,3}";
System.out.println("London".matches(regex));
System.out.println("Lond".matches(regex));
System.out.println("Lon".matches(regex));


0 commentaires

0
votes

Si le problème sous-jacent est que l'utilisateur peut saisir l'un de plusieurs noms et que vous souhaitez autoriser les abréviations, une approche assez standard consiste à avoir une table de noms acceptables.

Compte tenu de l'entrée de l'utilisateur, parcourez la table en testant "L'entrée de la table commence-t-elle par la chaîne saisie par l'utilisateur?" (comme l'une des réponses précédentes ici). Si oui, vous avez une correspondance potentielle .

Continuez à chercher. Si vous obtenez une seconde correspondance, la saisie de l'utilisateur était ambiguë et devrait être rejetée.

En prime, vous pouvez collecter tous les noms qui correspondent, puis les utiliser dans un message d'erreur. ("Choisissez l'un de Londres, Lonfoo, Lonbar").

Cette approche a l'avantage (par rapport à une longue chaîne de logique if-then-else) de ne pas vous obliger à écrire plus de code alors que tout ce que vous voulez faire est d'avoir plus de données.

Il autorise automatiquement l'abréviation unique la plus courte et s'ajustera lorsqu'une abréviation une fois unique n'est plus unique en raison de noms nouvellement ajoutés.


0 commentaires