2010-10-26 6 views
1

J'ai une question sur la validation en Java, j'ai regardé le sujet précédent et aucun ne semble répondre à mon petit problème. Ce que j'essaie de faire est de valider ce qui est mis dans une variable de chaîne dans le constructeur mais aussi quand une méthode set est utilisée. Ce dont j'ai besoin est si M. Mlle Mme ou Mme est entré, alors pour mettre cela dans une variable (titre) sinon alors pour définir le titre comme «non défini» et imprimer une erreur, maintenant je sais comment à la dernière partie, c'est la validation de ce que l'utilisateur entre dans la variable dans laquelle je suis coincé ... J'ai essayé d'utiliser un tableau mais je n'ai pas réussi à le faire fonctionner et essayé si les instructions, encore une fois ne pouvaient pas de fonctionnerValider une chaîne en Java

+1

publiez votre code [édité]. – hvgotcodes

Répondre

4
public void setTitle(final String title) 
{ 
    if (title.matches("^Mrs|Mr|Miss|Ms$")) 
    { 
    this.title = title; 
    } 
    else 
    { 
    this.title = "Not Set"; 
    System.err.format("%s is not a valid title, expecting Mrs,Mr,Miss,Ms\n", title); 
    } 
} 

si vous voulez faire insensible à la casse, puis modifier l'expression régulière à:

"(?i)^Mrs|Mr|Miss|Ms$" 

alors vous pouvez juste minuscules la chose entière et majuscules que la première lettre à re-normaliser votre entrée à ce que vous voulez vraiment. Google pour "java case" pour trouver des extraits de code pré-écrits.

Une plus concise un liner, cas encore sensible:

public void setTitle(final String title) 
{ 
    title.matches("^Mrs|Mr|Miss|Ms$")) ? this.title= title: this.title= "Not Set"; 
} 
+1

J'aime mieux cette réponse ... est assez flexible avec Regexp! – Necronet

0

Utilisez cette

String title = textBoxTitle.getText(); 
    if(!title.equals("Mr") && !title.equals("Miss") && !title.equals("Mrs") && !title.equals("Ms")) 
    { 
     // Text is invalid 
    } 
    else 
    { 
     // Text is valid 
    } 
+1

Les tests négatifs sont difficiles à lire et à comprendre du point de vue de la maintenance, pourquoi ne pas tester des équivalents || est égal à || ce serait mieux qu'un test négatif comme celui-ci. –

0

pourquoi ne pas simplement appeler une petite méthode qui fait la validation et définit la valeur?

private void validateString(String) { 

if string is valid 
call setter 
} 
+0

ou transformer cela en 'validateAndSet()' et appeler à la fois ctor et setter publique – Anon

+0

un nom de méthode ne devrait pas avoir un effet latéral qui n'est pas attendu, c'est un nom terrible. les méthodes devraient faire une chose et une seule chose, le fonctionnement interne devrait être une boîte noire, il n'y a absolument aucune raison d'avoir "valider" au nom de la méthode. Tout le visiteur devrait être concerné par le résultat final. si vous deviez l'appeler 'isValidPrefix' qui retournerait alors un vrai ou un faux, ce serait mieux, car c'est horrible. –

-1

je suis assez sûr que u fait quelque chose comme -


    if(title =="Mr."){ blah.. } // this will check the address

do this instead ..

if(title.equals("Mr."){blah..} // this will check the values..

+0

C'est ce que j'ai fait quand j'ai vu '' title.equals '' J'ai réalisé ce que je faisais de mal. – Chris

-1

Créer un ensemble de mots que vous vous souciez (les mettre en majuscule), puis voir si le titre tombe dans l'ensemble:

Set allowedTitles = new HashSet(); 
allowedTitles.add("MR"); 
allowedTitles.add("MRS"); 
allowedTitles.add("MS"); 
allowedTitles.add("MISS"); 
if (! allowedTitles.contains(textBoxTitle.getText().trim().toUpperCase()) { 
    //print exception 
} 
else { title = textBoxTitle.getText().trim()); 
+0

vérification de la capitalisation est une mauvaise idée à cause de l'Unicode, les majuscules en Unicode peuvent être problématiques, les minuscules de l'autre ont été normalisées pour les mêmes caractères. aussi la question originale les veut dans le bon cas, ils ne précisent rien sur l'insensibilité à la casse. –

+0

Assez juste. Utilisez toLowerCase() puis. Je pense que le downvote est un peu dur, car le concept était d'utiliser "contient". Si le cas n'est pas un problème, alors ne vous en souciez pas, évidemment. –

Questions connexes