【问题标题】:Java detect special characters in a stringJava检测字符串中的特殊字符
【发布时间】:2012-06-05 18:36:56
【问题描述】:

我使用正则表达式

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

检测一个字符串是否有一个或多个字符,而不是字母和数字;

然后我尝试了以下方法:

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

我测试过:

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

大多数时候,除了后挡板 \ 和插入符号 ^ 之外,它都可以工作。

例如

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

有什么我想念的吗?

【问题讨论】:

  • 我得到了“abcAsd10\\”和“abcAsd10^”的匹配,所以这里它返回true。请注意,我使用 C#,所以我认为它必须使用 Java。如果您编写一个小代码示例来演示您的问题,它会有所帮助。
  • FWIW,两个字符串似乎都匹配 on Ideone
  • 对不起,我有 r="[^A-za-z0-9]+"; (带有小“z”)。这会导致返回“false”
  • 你现在有答案了吗?不清楚您的问题或问题本身是否有类型。
  • 我有 r="[^A-za-z0-9]+";在我的代码中(带有小“z”,即 A-z)。这会导致返回“false”。但是为什么它可以与除反溅\和插入符号^之外的其他特殊字符一起使用?

标签: java regex special-characters


【解决方案1】:

以下代码在我编译和运行时打印“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);
    }
}

不知道为什么你会看到不同的结果...

【讨论】:

    【解决方案2】:

    不应该是这样的:

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

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

    【讨论】:

      【解决方案3】:

      当我在我的机器上运行这段代码时,它会打印 true..

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

      是的

      【讨论】:

      • 原来他有[^A-Za_z0-9]+
      • 所以我们需要标记这个问题......它只是一个错误
      • 原来的 ([^A-Za_z0-9]+) 应该是真的,保罗。没有人尝试'[^A-za_z0-9]+'?
      【解决方案4】:

      你也可以只改变:

      [\w&&^_]+
      

      地点:

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

      在课堂上查看更多信息Pattern

      【讨论】:

      • 也许以另一种方式体验可能会很有趣。
      【解决方案5】:

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

      Pattern.quote(p)
      

      【讨论】:

        【解决方案6】:

        简单地做:

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

        【讨论】:

          【解决方案7】:

          对不起,我有

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

          这会导致返回“false”。但是为什么它可以与除后挡板 \ 和插入符号 ^ 之外的其他特殊字符一起使用?

          【讨论】:

            猜你喜欢
            • 2016-01-14
            • 1970-01-01
            • 2019-02-09
            • 1970-01-01
            • 1970-01-01
            • 2011-05-29
            • 1970-01-01
            相关资源
            最近更新 更多