Comment vérifier si une chaîne contient un caractère spécial tel que:
[,],{,},{,),*,|,:,>,
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("I am a string");
boolean b = m.find();
if (b)
System.out.println("There is a special character in my string");
Vous pouvez utiliser le code suivant pour détecter le caractère spécial d'une chaîne.
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;
public class DetectSpecial{
public int getSpecialCharacterCount(String s) {
if (s == null || s.trim().isEmpty()) {
System.out.println("Incorrect format of string");
return 0;
}
Pattern p = Pattern.compile("[^A-Za-z0-9]");
Matcher m = p.matcher(s);
// boolean b = m.matches();
boolean b = m.find();
if (b == true)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return 0;
}
}
Si cela correspond à l'expression rationnelle [a-zA-Z0-9 ]*
alors il ne contient pas de caractères spéciaux.
Qu'est-ce que vous appelez exactement "caractère spécial"? Si vous voulez dire quelque chose comme "tout ce qui n'est pas alphanumérique", vous pouvez utiliser la classe org.Apache.commons.lang.StringUtils (méthodes IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable).
Si ce n'est pas si simple, vous pouvez utiliser une expression régulière qui définit la liste de caractères exacte que vous acceptez et associez la chaîne à celle-ci.
Si vous voulez avoir des lettres, caractères spéciaux et chiffres dans votre mot de passe avec au moins 8 chiffres, utilisez ce code, il fonctionne parfaitement
public static boolean Password_Validation(String password)
{
if(password.length()>=8)
{
Pattern letter = Pattern.compile("[a-zA-z]");
Pattern digit = Pattern.compile("[0-9]");
Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?{}\\[\\]~-]");
//Pattern eight = Pattern.compile (".{8}");
Matcher hasLetter = letter.matcher(password);
Matcher hasDigit = digit.matcher(password);
Matcher hasSpecial = special.matcher(password);
return hasLetter.find() && hasDigit.find() && hasSpecial.find();
}
else
return false;
}
Tout dépend de ce que vous entendez par "spécial". Dans une regex, vous pouvez spécifier
Je soupçonne que ce dernier est ce que vous voulez dire. Mais sinon, utilisez une liste [] pour spécifier exactement ce que vous voulez.
Regardez la classe Java.lang.Character
. Il comporte quelques méthodes de test et vous en trouverez peut-être une qui correspond à vos besoins.
Exemples: Character.isSpaceChar(c)
ou !Character.isJavaLetter(c)
Vous devez d’abord identifier de manière exhaustive les caractères spéciaux que vous souhaitez vérifier.
Ensuite, vous pouvez écrire une expression régulière et utiliser
public boolean matches(String regex)
Pattern p = Pattern.compile("[\\p{Alpha}]*[\\p{Punct}][\\p{Alpha}]*");
Matcher m = p.matcher("Afsff%esfsf098");
boolean b = m.matches();
if (b == true)
System.out.println("There is a sp. character in my string");
else
System.out.println("There is no sp. char.");
Cela a fonctionné pour moi:
String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
System.out.println("clear");
} else {
System.out.println("buzz");
}
Visitez chaque caractère de la chaîne pour voir s'il figure dans une liste noire de caractères spéciaux. c'est O (n * m).
Le pseudo-code est:
for each char in string:
if char in blacklist:
...
La complexité peut être légèrement améliorée en triant la liste noire afin que vous puissiez quitter chaque contrôle plus tôt. Cependant, la fonction de recherche de chaîne étant probablement du code natif, cette optimisation - qui serait dans Java byte-code] - pourrait bien être plus lente.
// sans utiliser l'expression régulière ........
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String name="3_ saroj@";
String str2[]=name.split("");
for (int i=0;i<str2.length;i++)
{
if (specialCharacters.contains(str2[i]))
{
System.out.println("true");
//break;
}
else
System.out.println("false");
}
// ceci est une version mise à jour du code que j'ai posté/* La méthode isValidName vérifiera si le nom transmis en argument ne doit pas contenir - 1.null value ou space 2.des caractères spéciaux 3.Digits (0-9) Explication-- - Ici, str2 est une variable de tableau String qui stocke la chaîne de nom fractionnée transmise en tant qu'argument. La variable count comptera le nombre de caractères spéciaux générés. La méthode retournera true si elle satisfait à toutes les conditions * /
public boolean isValidName(String name)
{
String specialCharacters=" !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String str2[]=name.split("");
int count=0;
for (int i=0;i<str2.length;i++)
{
if (specialCharacters.contains(str2[i]))
{
count++;
}
}
if (name!=null && count==0 )
{
return true;
}
else
{
return false;
}
}
dans la ligne String str2 [] = name.split (""); donnez un caractère supplémentaire dans Array ... Laissez-moi vous expliquer par l'exemple "Aditya" .split ("") renverrait [ A, d, i, t, y, a] Vous aurez un caractère supplémentaire dans votre Array .. .
Le "Aditya" .split ("") ne fonctionne pas comme prévu par saroj routray, vous obtiendrez un caractère supplémentaire dans String => [ A, d, i, t, y, a].
Je l'ai modifié, voir ci-dessous le code cela fonctionne comme prévu
public static boolean isValidName(String inputString) {
String specialCharacters = " !#$%&'()*+,-./:;<=>?@[]^_`{|}~0123456789";
String[] strlCharactersArray = new String[inputString.length()];
for (int i = 0; i < inputString.length(); i++) {
strlCharactersArray[i] = Character
.toString(inputString.charAt(i));
}
//now strlCharactersArray[i]=[A, d, i, t, y, a]
int count = 0;
for (int i = 0; i < strlCharactersArray.length; i++) {
if (specialCharacters.contains( strlCharactersArray[i])) {
count++;
}
}
if (inputString != null && count == 0) {
return true;
} else {
return false;
}
}
Convertissez la chaîne en tableau de caractères avec toutes les lettres en minuscule:
char c[] = str.toLowerCase().toCharArray();
Ensuite, vous pouvez utiliser Character.isLetterOrDigit(c[index])
pour déterminer quel index comporte des caractères spéciaux.