Як перевірити, чи містить рядок такий спеціальний символ, як:
[,],{,},{,),*,|,:,>,
Як перевірити, чи містить рядок такий спеціальний символ, як:
[,],{,},{,),*,|,:,>,
Відповіді:
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");
Ви можете використовувати наступний код для виявлення спеціального символу з рядка.
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;
}
}
Якщо ви хочете, щоб у вашому паролі були принаймні 8 цифр, БУКВ, СПЕЦІАЛЬНИХ ХАРАКТЕРІВ І НОМЕРІВ, використовуйте цей код, він чудово працює
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;
}
Що ви власне називаєте "особливим персонажем"? Якщо ви маєте на увазі щось на зразок "що-небудь, що не є буквено-цифровим", ви можете використовувати клас org.apache.commons.lang.StringUtils (методи IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable).
Якщо він не такий тривіальний, ви можете використати регулярний вираз, який визначає точний прийнятий список символів і порівнює рядок із ним.
Погляньте на java.lang.Character
клас. У ньому є кілька методів тестування, і ви можете знайти той, який відповідає вашим потребам.
Приклади: Character.isSpaceChar(c)
або!Character.isJavaLetter(c)
Спочатку ви повинні вичерпно визначити спеціальні символи, які ви хочете перевірити.
Тоді ви можете написати регулярний вираз і використовувати
public boolean matches(String regex)
Це тестується в android 7.0 до android 10.0, і це працює
Використовуйте цей код, щоб перевірити, чи рядок містить спеціальні символи та цифри:
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
}
Завітайте до кожного символу в рядку, щоб побачити, чи є цей символ у чорному списку спеціальних символів; це O (n * m).
Псевдокодом є:
for each char in string:
if char in blacklist:
...
Складність можна трохи покращити, відсортувавши чорний список, щоб можна було достроково вийти з кожної перевірки. Однак функція пошуку рядків є, мабуть, власним кодом, тому ця оптимізація - яка б виконувалася в байт-коді Java - цілком може бути повільнішою.
// без використання регулярного виразу ........
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");
}
// це оновлена версія коду, який я опублікував / * Метод isValidName перевірить, чи не повинно містити ім'я, передане в якості аргументу - 1. нульове значення або пробіл 2. будь-який спеціальний символ 3. Цифри (0-9) Пояснення - - Тут str2 є змінною масиву String, яка зберігає роздільний рядок імені, яке передається як аргумент Змінна count буде рахувати кількість спеціальних символів, що виникають. Метод поверне true, якщо він задовольняє всім умовам * /
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;
}
}
у рядку Рядок str2 [] = name.split (""); дайте зайвий символ у масиві ... Дозвольте пояснити на прикладі "Aditya" .split ("") поверне [, A, d, i, t, y, a] У вашому масиві буде додатковий символ .. .
"Aditya" .split ("") не працює, як очікував saroj routray. Ви отримаєте додатковий символ у рядку => [, A, d, i, t, y, a].
Я змінив його, див. Нижче код, він працює як слід
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;
}
}
Використовуйте статичний метод класу java.util.regex.Pattern, що відповідає (регулярний вираз, String obj)
регулярному виразу: символи з малої та верхньої літери та цифри від 0 до 9
.
Він повертає логічне значення true, якщо містить лише символи та числа, інакше повертає логічне значення false
Приклад.
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>
}