Как проверить, содержит ли строка специальный символ, такой как:
[,],{,},{,),*,|,:,>,
Как проверить, содержит ли строка специальный символ, такой как:
[,],{,},{,),*,|,:,>,
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;
}
}
Если он соответствует регулярному выражению [a-zA-Z0-9 ]*
, то в нем нет специальных символов.
Если вы хотите иметь ПИСЬМА, СПЕЦИАЛЬНЫЕ ХАРАКТЕРЫ и НОМЕРА в своем пароле с не менее чем 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 ("[[email protected]#$%&*()_+=|<>?{}\\[\\]~-]");
//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)
Посетите каждый символ в строке, чтобы увидеть, находится ли этот символ в черном списке специальных символов; это O (n * m).
Псевдокод:
for each char in string:
if char in blacklist:
...
Сложность может быть немного улучшена путем сортировки черного списка, чтобы вы могли рано выйти из каждой проверки. Однако функция поиска строк, вероятно, является родным кодом, поэтому эта оптимизация, которая будет в байт-коде Java, может быть медленнее.
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.");
//без использования регулярного выражения........
String specialCharacters=" !#$%&'()*+,-./:;<=>[email protected][]^_`{|}~0123456789";
String name="3_ [email protected]";
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.Digits(0-9) Объяснение --- Здесь str2 - это переменная массива String, которая хранит разделенную строку имени, которая передается как аргумент Переменная count подсчитывает количество специальных символов Метод вернет true, если он удовлетворяет всем условиям */
public boolean isValidName(String name)
{
String specialCharacters=" !#$%&'()*+,-./:;<=>[email protected][]^_`{|}~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;
}
}
в строке String str2 [] = name.split(""); дать дополнительный символ в массиве...
Позвольте мне объяснить на примере
"Aditya".split("") вернет [, A, d, i, t, y, a] У вас будет дополнительный символ в вашем массиве...
"Aditya".split("") работает не так, как ожидалось, с помощью маршрута saroj, вы получите дополнительный символ в String = > [, A, d, i, t, y, a].
Я изменил его, см. ниже код работает как ожидалось
public static boolean isValidName(String inputString) {
String specialCharacters = " !#$%&'()*+,-./:;<=>[email protected][]^_`{|}~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;
}
}
Это сработало для меня:
String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
System.out.println("clear");
} else {
System.out.println("buzz");
}
Преобразуйте строку в массив символов со всеми буквами в нижнем регистре:
char c[] = str.toLowerCase().toCharArray();
Затем вы можете использовать Character.isLetterOrDigit(c[index])
чтобы узнать, какой индекс имеет специальные символы.
Использовать совпадения статического метода класса java.util.regex.Pattern(regex, String obj)
регулярное выражение: символы в нижнем и верхнем регистре и цифры от 0 до 9
String obj: объект String, который вы хотите проверить, содержит ли он специальный символ или нет.
Возвращает логическое значение 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>
}