public class Snippet {
public static void main(String[] args) throws UnsupportedEncodingException {
String a = new String("a\\");//匹配a\
System.out.println(a.matches("[a\\]"));//报错
System.out.println(a.matches("[\\u0041\\]"));//报错,这个是疯狂java讲义第339页给的正则匹配
}
}错误源代码:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 8
[\u0041\]
        ^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.clazz(Pattern.java:2254)
at java.util.regex.Pattern.sequence(Pattern.java:1818)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.util.regex.Pattern.matches(Pattern.java:928)
at java.lang.String.matches(String.java:2090)
at com.chenlong.Snippet.main(Snippet.java:9)在疯狂java讲义这本书的第340页,说的匹配中文字符[\\u0041-\\u0056],
先说转义的错误, 怎么会是两个\\了,本来\u就是转义了, 而且中文这么多,怎么
范围才这点,请大家解答,不会是我买到盗版的书籍了吧。

解决方案 »

  1.   


    public class Snippet {
    public static void main(String[] args) throws UnsupportedEncodingException {
    String a = new String("\\");//这样就是对的
    System.out.println(a.matches("[\\\\]"));//
    }
    }public class Snippet {
    public static void main(String[] args) throws UnsupportedEncodingException {
    String a = new String("\\");//
    System.out.println(a.matches("[\\]"));//报异常
    }
    }Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character class near index 2
    [\]
      ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.clazz(Pattern.java:2254)
    at java.util.regex.Pattern.sequence(Pattern.java:1818)
    at java.util.regex.Pattern.expr(Pattern.java:1752)
    at java.util.regex.Pattern.compile(Pattern.java:1460)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at java.util.regex.Pattern.matches(Pattern.java:928)
    at java.lang.String.matches(String.java:2090)
    at com.chenlong.Snippet.main(Snippet.java:10)
      

  2.   

    String a = new String("a\\");//匹配a\
    System.out.println(a.matches("[a\\]"));// \\]相当于匹配]所以 前面那个框没结尾,报错
    System.out.println(a.matches("[\\u0041\\]"));//下面这个框跟上面道理一样的。
      

  3.   

    String a = new String("\\");//这样就是对的
    引号下面\\代表一个\
    所以需要这样匹配"[\\\\]" 如果是指这种情况"[\\]"就会报错,跟我上面说的那种情况一样的错,把]搞丢了。
    所以要得到一个\ 用这种"\\\\"或者这种"[\\\\\]"
      

  4.   

    public class job
    {
    public static void main(String[]args)
    {
     
             String a = new String("\\");
             System.out.println(a.matches("[\\\\]")); }
      

  5.   


             String a = new String("\\");
             System.out.println(a.matches("\\\\"));//结果都是true
      

  6.   

    str.matches("^\\w{3,8}\\s*\\[0-9a-zA-z]$")这种写法也可以啊