源程序是实现加减乘除的一个简单计算器的。
其中一句是这样的:
Pattern entryOfExpression = Pattern.compile("[0-9]+(\\.[0-9]+)?|\\(|\\)|\\+|-|\\*|/");
这句意思应该是想匹配一个整数或小数,或者加减乘除和括号的符号。
我不明白为什么“\\.”表示的是“.”,而不是“\.”表示“.”呢?!
不是“\”是转义符吗?!现在这样子不就变成“\\”才是转义符吗?!另外,小弟在NetBeans 6.0.1下编译的。若把“\\”改成“\”后编译会提示该行“非法转义字符”错误。请指点~~~

解决方案 »

  1.   

    \.是转义,前面个\是编译器需要,所以一般都要写成\\.如果直接cmd中的话就只要写成\.略去了
    编译器需要的那个\,可以跟火龙学正则去,他翻译的那个不错滴
      

  2.   

    因为这个里面有双重转义正则式要表示".",表达式是"\."所以就需要构造一个字符串为"\."在java的字符串里,"\\"才是代表"\"所以你在java里要表示"\.",自然就要用"\\."-----------------------
    也就是说,java字符串"\\."表示正则式"\.",正则式"\."表示"."
      

  3.   

    建议把:Pattern.compile("[0-9]+(\\.[0-9]+)?|\\(|\\)|\\+|-|\\*|/"); 
    改 成:Pattern.compile("[()+*/-]|[0-9]+(\\.[0-9]+)?");