JAVA:检查string是否有特殊字符

如果有一个特殊的字符,如何检查一个string:

[,],{,},{,),*,|,:,>, 
 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"); 

您可以使用下面的代码来检测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 == true) System.out.println("There is a special character in my string "); else System.out.println("There is no special char."); return 0; } } 

如果它匹配正则expression式[a-zA-Z0-9 ]*那么没有特殊字符。

你到底叫什么“特殊字符”? 如果你的意思是“任何不是字母数字的”,你可以使用org.apache.commons.lang.StringUtils类(方法IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable)。

如果不是那么微不足道的话,你可以使用一个正则expression式来定义你接受的确切的字符列表,并且匹配string。

看看java.lang.Character类。 它有一些testing方法,你可能会find一个适合你的需求。

例子: Character.isSpaceChar(c)!Character.isJavaLetter(c)

一切都取决于你所说的“特殊”的意思。 在一个正则expression式中,你可以指定

  • \ W表示非字母数字
  • \ p {Punct}表示标点符号

我怀疑后者是你的意思。 但是,如果不使用[]列表来确切地指定你想要的。

首先,你必须详尽地确定你想检查的特殊字符。

然后你可以写一个正则expression式并使用

 public boolean matches(String regex) 

如果您想在您的密码中input至less8位数的字母,特殊字符和数字,请使用此代码,这是完美的

 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; } 

访问string中的每个字符,查看该字符是否在特殊字符的黑名单中; 这是O(n * m)。

伪代码是:

 for each char in string: if char in blacklist: ... 

通过sorting黑名单可以稍微改善复杂性,以便您可以提前退出每个检查。 然而,string查找function可能是本地代码,所以这种优化 – 这将是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."); 

//不使用正则expression式……..

  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方法将检查作为parameter passing的名称是否不应该包含-1null值或空格2.any特殊字符3.数字(0-9)说明 – – 这里str2是string数组variables,它存储作为parameter passing的名字的分割string。countvariables将计算出现特殊字符的数量。如果方法满足所有条件,则返回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; } } 

在这一行String 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; } } 

这对我工作

  String s = "string"; if(Pattern.matches("[a-zA-Z]+", s)) { System.out.println("clear"); } else { System.out.println("buzz"); }