java-检查字符串是否包含特殊ch

如何检查字符串是否包含特殊字符,例如:

[,],{,},{,),*,|,:,>,
blue asked 2019-10-09T15:59:04Z
16个解决方案
109 votes
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");
r3zn1k answered 2019-10-09T15:59:10Z
18 votes

您可以使用以下代码从字符串中检测特殊字符。

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;
 }
}
Ashish Sharma answered 2019-10-09T15:59:41Z
14 votes

如果它与正则表达式[a-zA-Z0-9 ]*相匹配,则其中没有特殊字符。

fastcodejava answered 2019-10-09T16:00:10Z
9 votes

您究竟称什么为“特殊字符”? 如果您的意思是“任何不是字母数字的东西”,则可以使用org.apache.commons.lang.StringUtils类(方法IsAlpha / IsNumeric / IsWhitespace / IsAsciiPrintable)。

如果不是那么简单,则可以使用正则表达式定义您接受的确切字符列表,并将字符串与之匹配。

Michael Zilbermann answered 2019-10-09T16:00:50Z
9 votes

如果您希望密码中包含字母,特殊字符和数字(至少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;

}
Pir Fahim Shah answered 2019-10-09T16:01:18Z
7 votes

一切都取决于您所说的“特殊”。 在正则表达式中,您可以指定

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

我怀疑后者就是您的意思。 但是,如果没有,请使用[]列表确切指定您想要的内容。

djna answered 2019-10-09T16:02:12Z
7 votes

看看Character.isSpaceChar(c)类。 它具有一些测试方法,您可能会找到适合您需求的方法。

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

Andreas_D answered 2019-10-09T16:02:45Z
3 votes

首先,您必须详尽地标识要检查的特殊字符。

然后,您可以编写正则表达式并使用

public boolean matches(String regex)
Varun answered 2019-10-09T16:03:24Z
1 votes

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

伪代码为:

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

通过对黑名单进行排序,可以稍微提高复杂性,以便您可以提前退出每张支票。 但是,字符串查找功能可能是本机代码,因此此优化(可能是Java字节码)可能会变慢。

Will answered 2019-10-09T16:04:04Z
1 votes
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.");
Bhushan answered 2019-10-09T16:04:23Z
1 votes

//不使用正则表达式.....

    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");
    }
saroj routray answered 2019-10-09T16:04:54Z
1 votes

//这是我发布的代码的更新版本/ *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;
    }
}
saroj routray answered 2019-10-09T16:05:25Z
1 votes

在字符串str2 [] = name.split(“”);中; 在数组中给一个额外的字符...让我以身作则“ Aditya” .split(“”)将返回[,A,d,i,t,y,a]您的Array中将有一个额外的字符...
“ 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;
    }
}
answered 2019-10-09T16:06:06Z
1 votes

这对我有用:

String s = "string";
if (Pattern.matches("[a-zA-Z]+", s)) {
 System.out.println("clear");
} else {
 System.out.println("buzz");
}
antroid answered 2019-10-09T16:06:27Z
0 votes

将所有字母转换为小写的字符串转换为char数组:

char c[] = str.toLowerCase().toCharArray();

然后,您可以使用Character.isLetterOrDigit(c[index])找出哪个索引具有特殊字符。

Raj answered 2019-10-09T16:07:02Z
-1 votes

使用java.util.regex.Pattern类的静态方法匹配项(正则表达式,字符串obj)
regex:小写和大写字符以及0-9之间的数字
String obj:要检查其是否包含特殊字符的String对象。

如果仅包含字符和数字,则返回布尔值true,否则返回布尔值false

例。

String isin = "12GBIU34RT12";<br>
if(Pattern.matches("[a-zA-Z0-9]+", isin)<br>{<br>
   &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Valid isin");<br>
}else{<br>
   &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Invalid isin");<br>
}
Suraj Mahli answered 2019-10-09T16:08:02Z
translate from https://stackoverflow.com:/questions/1795402/check-if-a-string-contains-a-special-character