Wie überprüfen Sie, ob ein String ein Sonderzeichen enthält wie:
[,],{,},{,),*,|,:,>,
Wie überprüfen Sie, ob ein String ein Sonderzeichen enthält wie:
[,],{,},{,),*,|,:,>,
Antworten:
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");
Mit dem folgenden Code können Sie Sonderzeichen aus Zeichenfolgen erkennen.
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)
System.out.println("There is a special character in my string ");
else
System.out.println("There is no special char.");
return 0;
}
}
Wenn Sie Buchstaben, Sonderzeichen und Zahlen in Ihrem Passwort mit mindestens 8 Ziffern haben möchten, verwenden Sie diesen Code, er funktioniert einwandfrei
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;
}
Wie nennt man genau "Sonderzeichen"? Wenn Sie etwas wie "alles, was nicht alphanumerisch ist" meinen, können Sie die Klasse org.apache.commons.lang.StringUtils (Methoden IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable) verwenden.
Wenn es nicht so trivial ist, können Sie einen regulären Ausdruck verwenden, der die genaue Zeichenliste definiert, die Sie akzeptieren, und die Zeichenfolge damit vergleicht.
Alles hängt davon ab, was Sie unter "speziell" verstehen. In einem regulären Ausdruck können Sie angeben
Ich vermute, dass letzteres das ist, was du meinst. Wenn nicht, verwenden Sie eine [] -Liste, um genau anzugeben, was Sie möchten.
Schauen Sie sich die java.lang.Character
Klasse an. Es gibt einige Testmethoden, und Sie finden möglicherweise eine, die Ihren Anforderungen entspricht.
Beispiele: Character.isSpaceChar(c)
oder!Character.isJavaLetter(c)
Zuerst müssen Sie die Sonderzeichen, die Sie überprüfen möchten, vollständig identifizieren.
Dann können Sie einen regulären Ausdruck schreiben und verwenden
public boolean matches(String regex)
Dies ist in Android 7.0 bis Android 10.0 getestet und es funktioniert
Verwenden Sie diesen Code, um zu überprüfen, ob die Zeichenfolge Sonderzeichen und Zahlen enthält:
name = firstname.getText().toString(); //name is the variable that holds the string value
Pattern special= Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Pattern number = Pattern.compile("[0-9]", Pattern.CASE_INSENSITIVE);
Matcher matcher = special.matcher(name);
Matcher matcherNumber = number.matcher(name);
boolean constainsSymbols = matcher.find();
boolean containsNumber = matcherNumber.find();
if(constainsSymbols == true){
//string contains special symbol/character
}
else if(containsNumber == true){
//string contains numbers
}
else{
//string doesn't contain special characters or numbers
}
Besuchen Sie jedes Zeichen in der Zeichenfolge, um festzustellen, ob sich dieses Zeichen in einer schwarzen Liste von Sonderzeichen befindet. das ist O (n * m).
Der Pseudocode lautet:
for each char in string:
if char in blacklist:
...
Die Komplexität kann leicht verbessert werden, indem die schwarze Liste so sortiert wird, dass Sie jede Prüfung vorzeitig beenden können. Die String-Suchfunktion ist jedoch wahrscheinlich nativer Code, sodass diese Optimierung - die im Java-Bytecode erfolgen würde - möglicherweise langsamer ist.
// ohne regulären Ausdruck zu verwenden ........
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");
}
// Dies ist eine aktualisierte Version des Codes, den ich gepostet habe. / * Die isValidName-Methode prüft, ob der als Argument übergebene Name nicht Folgendes enthalten sollte: 1. Nullwert oder Leerzeichen 2. Jedes Sonderzeichen 3. Ziffern (0-9) Erläuterung-- - Hier ist str2 eine String-Array-Variable, die die geteilte Zeichenfolge des Namens speichert, die als Argument übergeben wird. Die Zählvariable zählt die Anzahl der auftretenden Sonderzeichen. Die Methode gibt true zurück, wenn alle Bedingungen erfüllt sind * /
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;
}
}
in der Zeile String str2 [] = name.split (""); Geben Sie ein zusätzliches Zeichen in Array an ... Lassen Sie mich anhand eines Beispiels erklären, dass "Aditya" .split ("") [, A, d, i, t, y, a] zurückgeben würde. Sie haben ein zusätzliches Zeichen in Ihrem Array. .
Die "Aditya" .split ( "") funktioniert nicht wie erwartet von saroj routray werden Sie ein zusätzliches Zeichen in String => [, A, D, i, t, y, a] erhalten.
Ich habe es geändert, siehe unten Code es funktioniert wie erwartet
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;
}
}
Verwenden Sie die statische Methode der Klasse java.util.regex.Pattern. Übereinstimmungen (Regex, String obj)
Regex: Zeichen in Klein- und Großbuchstaben und Ziffern zwischen 0 und 9
String obj: String-Objekt, das überprüft werden soll, ob es Sonderzeichen enthält oder nicht.
Der boolesche Wert true wird zurückgegeben, wenn nur Zeichen und Zahlen enthalten sind. Andernfalls wird der boolesche Wert false zurückgegeben.
Beispiel.
String isin = "12GBIU34RT12";<br>
if(Pattern.matches("[a-zA-Z0-9]+", isin)<br>{<br>
System.out.println("Valid isin");<br>
}else{<br>
System.out.println("Invalid isin");<br>
}