如何检查字符串是否包含特殊字符,例如:
[,],{,},{,),*,|,:,>,
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;
}
如果它与正则表达式匹配,则[a-zA-Z0-9 ]*
其中没有特殊字符。
你到底把什么叫做“特殊字符”?如果你的意思是“任何不是字母数字的东西”,你可以使用 org.apache.commons.lang.StringUtils 类(方法 IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable)。
如果它不是那么简单,您可以使用一个正则表达式来定义您接受的确切字符列表并将字符串与之匹配。
一切都取决于您所说的“特殊”是什么意思。在正则表达式中,您可以指定
我怀疑后者就是你的意思。但是,如果不使用 [] 列表来准确指定您想要的内容。
看看java.lang.Character
课堂。它有一些测试方法,您可能会找到适合您需要的一种。
示例:Character.isSpaceChar(c)
或!Character.isJavaLetter(c)
这是在 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
}
这对我有用:
String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
System.out.println("clear");
} else {
System.out.println("buzz");
}
首先,您必须详尽地确定要检查的特殊字符。
然后你可以写一个正则表达式并使用
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.");
//不使用正则表达式............
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.null 值或空格 2.任何特殊字符 3.Digits (0-9) 说明-- - 这里 str2 是字符串数组变量,它存储作为参数传递的名称的拆分字符串 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;
}
}
访问字符串中的每个字符,查看该字符是否在特殊字符黑名单中;这是 O(n*m)。
伪代码是:
for each char in string:
if char in blacklist:
...
通过对黑名单进行排序可以稍微提高复杂性,以便您可以提前退出每个检查。但是,字符串查找函数可能是本机代码,因此这种优化(在 Java 字节码中)可能会更慢。
在字符串 str2[]=name.split(""); 在数组中给出一个额外的字符...让我通过示例来解释“Aditya”.split("") 将返回 [, A, d,i,t,y,a] 您的数组中将有一个额外的字符.. .
"Aditya".split("") 无法按 saroj routray 的预期工作,您将在 String => [, 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;
}
}
将字符串转换为所有字母均为小写的 char 数组:
char c[] = str.toLowerCase().toCharArray();
然后你可以用Character.isLetterOrDigit(c[index])
它来找出哪个索引有特殊字符。
使用 java.util.regex.Pattern 类的静态方法 match(regex, String obj)
regex : 小写和大写字符 & 0-9 之间的数字
String obj : 要检查它是否包含特殊字符的字符串对象。
如果仅包含字符和数字,则返回布尔值 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>
}