2017-08-23 6 views
4

Salut les gars, j'ai besoin de savoir s'il y a une validation de prédicat dans java qui vérifie si la chaîne contient des nombres. Je veux autoriser les caractères spéciaux mais pas de nombres ni d'espaces. Il y a des prédicats qui vérifient les alphabets mais ils ne permettent pas les caractères spéciaux, j'ai besoin de quelque chose qui n'accepte que les alphabets et les caractères spéciaux et renvoie false si la chaîne contient des espaces ou des nombres.Chaîne Prédicats à valider si une chaîne contient une valeur numérique en java

+0

Quelle est votre définition des caractères spéciaux? – shmosel

+0

Un soulignement pour être précis, mais je veux éviter d'utiliser Regex !! – Alex

+2

Pourquoi voudriez-vous éviter regex? – shmosel

Répondre

4

Je vais utiliser une regex pour montrer ma compréhension de la question. Vous voulez un Predicate<String> qui retourne vrai pour toute chaîne correspondant à

[a-zA-Z_]* 

Une façon de le faire est regexlessly d'utiliser une boucle et vérifier chaque caractère:

Predicate<String> predicate = x -> { 
    for (int i = 0 ; i < x.length() ; i++) { 
     if (!Character.isLetter(x.charAt(i)) && !x.charAt(i) == '_') { 
      return false; 
     } 
    } 
    return true; 
}; 

Voici une méthode qui fait la même chose:

public static boolean test(String x) { 
    for (int i = 0 ; i < x.length() ; i++) { 
     if (!Character.isLetter(x.charAt(i)) && !x.charAt(i) == '_') { 
      return false; 
     } 
    } 
    return true; 
} 
+0

Chaîne à vérifier ici est x si je ne me trompe pas ?? – Alex

+0

Vous pouvez l'utiliser comme ceci: 'predicate.test (" Votre chaîne ")'. Vous avez dit que vous vouliez un prédicat alors je vous en ai donné un. Voulez-vous une méthode ou quelque chose? @Alex – Sweeper

+0

Oui, je suis un peu nouveau chez Predicates donc une réponse détaillée serait appréciée! – Alex