如何检查字符串是否包含特殊字符,如:
[,],{,},{,),*,|,:,>,
答案 0 :(得分:111)
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");
答案 1 :(得分:21)
您可以使用以下代码从字符串中检测特殊字符。
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;
}
}
答案 2 :(得分:14)
如果它与正则表达式[a-zA-Z0-9 ]*
匹配,则其中没有特殊字符。
答案 3 :(得分:9)
你究竟称之为“特殊角色”?如果你的意思是“任何不是字母数字的东西”,你可以使用org.apache.commons.lang.StringUtils类(方法IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable)。
如果它不是那么简单,你可以使用一个正则表达式来定义你接受的确切字符列表,并将字符串与它匹配。
答案 4 :(得分: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 ("[!@#$%&*()_+=|<>?{}\\[\\]~-]");
//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;
}
答案 5 :(得分:7)
一切都取决于你所说的“特殊”。在正则表达式中,您可以指定
我怀疑后者就是你的意思。但如果不使用[]列表来准确指定您想要的内容。
答案 6 :(得分:7)
查看java.lang.Character
课程。它有一些测试方法,你可以找到一个符合你需求的方法。
示例:Character.isSpaceChar(c)
或!Character.isJavaLetter(c)
答案 7 :(得分:3)
首先,您必须详尽地识别要检查的特殊字符。
然后你可以写一个正则表达式并使用
public boolean matches(String regex)
答案 8 :(得分:1)
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.");
答案 9 :(得分:1)
访问字符串中的每个字符,以查看该字符是否在特殊字符的黑名单中;这是O(n * m)。
伪代码是:
for each char in string:
if char in blacklist:
...
通过对黑名单进行排序可以略微提高复杂性,以便您可以提前退出每项检查。但是,字符串查找函数可能是本机代码,因此这种优化 - 可能是Java字节代码 - 可能会更慢。
答案 10 :(得分:1)
//不使用正则表达式........
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");
}
答案 11 :(得分:1)
//这是我发布的代码的更新版本 / * isValidName方法将检查作为参数传递的名称是否不应包含 - 1.空值或空间 2.任何特殊的性格 3.Digits(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;
}
}
答案 12 :(得分:1)
行String str2 [] = name.split(“”);在Array中添加一个额外的字符......
让我举例说明
“Aditya”.split(“”)会返回[,A,d,i,t,y,a]你的数组中会有一个额外的字符......
“Aditya”.split(“”)无法按照saroj routray的预期工作,您将在String =&gt;中获得额外的字符。 [,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;
}
}
答案 13 :(得分:1)
这对我有用:
String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
System.out.println("clear");
} else {
System.out.println("buzz");
}
答案 14 :(得分:0)
将字符串转换为所有小写字母的char数组:
char c[] = str.toLowerCase().toCharArray();
然后,您可以使用Character.isLetterOrDigit(c[index])
来找出哪个索引具有特殊字符。
答案 15 :(得分:0)
这已在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
}
答案 16 :(得分:-1)
使用java.util.regex.Pattern类的静态方法匹配(正则表达式,字符串obj)
regex:大小写字符以及0-9之间的数字
String obj:要检查的字符串对象是否包含特殊字符。
如果仅包含字符和数字,则返回布尔值true,否则返回布尔值false
例子。
LEAD(A.CreatedDate,1,0) OVER (ORDER BY A.CreatedDate)