Java检测字符串中的特殊字符

时间:2012-06-05 18:36:56

标签: java regex special-characters

我使用正则表达式

r="[^A-Za-z0-9]+"; 

检测字符串是否有一个或多个字母和数字以外的字符;

然后我尝试了以下内容:

Pattern.compile(r).matcher(p).find();

我测试过:

! @ # $ % ^ & * ( ) +  =- [ ] \ ' ; , . / { } | " : < > ? ~ _ `

大多数情况下,除了backsplash \和caret ^之外它都有效。

e.g。

String p = "abcAsd10^"    (return false)
String p = "abcAsd10\\"   (return false) 

我想念的一切?

7 个答案:

答案 0 :(得分:2)

以下代码在编译并运行时打印“Found:true”:

class T
{
    public static void main (String [] args)
    {
        String thePattern = "[^A-Za-z0-9]+"; 
        String theInput = "abskKel35^";
        boolean isFound = Pattern.compile(thePattern).matcher(theInput).find();
        System.out.println("Found: " + isFound);
    }
}

不确定为什么会看到不同的结果......

答案 1 :(得分:1)

不应该是:

r="[^A-Za-z0-9]+"; 

在你的问题中你写了a_z(下划线)

答案 2 :(得分:1)

您也可以只更改:

[\w&&^_]+

其中:

  • \w带下划线的单词字符:[a-zA-Z_0-9]
  • \W非单词字符:[^\w]

在课程Pattern

中查看更多内容

答案 3 :(得分:1)

当我在我的机器上运行此代码时,它会打印出真的..

        String r="[^A-Za-z0-9]+"; 
        String p = "abcAsd10\\" ;
        Matcher m = Pattern.compile(r).matcher(p);
        System.out.println(m.find());
  

答案 4 :(得分:0)

尝试将您的输入引用到匹配器中。

Pattern.quote(p)

答案 5 :(得分:0)

抱歉,我有

r="[^A-za-z0-9]+"; (with little "z", i.e. A-z). 

导致返回“false”。但是为什么它与其他特殊字符一起工作,除了backsplash \和caret ^?

答案 6 :(得分:0)

简单地说:

p.matches(".*\\W.*"); //return true if contains one or more special character