A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jagon 中级黑马   /  2014-3-20 10:11  /  953 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jagon 于 2014-3-20 10:13 编辑

public class TestDemo {
    public static void main(String[] args) throws Exception {
        String str = "123.1" ;
        String regex = "\\d+(\\.\\d+)?" ;     //谁能帮我解释清楚点,有点迷惑?(括号中的部分)
        if (str.matches(regex)) {   // 符合于验证要求
            double data = Double.parseDouble(str) ; // 字符串变为double型数据
            System.out.println(data * data);
        } else {
            System.out.println("字符串不是数字所组成!");
        }
    }
}

刚开始学正则,感觉有点迷惑,谁帮我解释清楚点,谢谢了!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
括号内是组的概念,你看视频,会说到的。
回复 使用道具 举报
  1. String regex = "\\d+(\\.\\d+)?" ;
  2. 正在使用的时候,正则是: \d+(\.\d+)?
  3. “\”可以用来转义。因为”.“在正则里面有特殊含义,要真正匹配”.“的时候,就得用 “\."
  4. 所以(\.\d+)就是一个”.“后面跟一个或者多个数字。
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
"\\d+(\\.\\d+)?"

根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。
上面结实实在api中找到的  ,有了这个解释就好理解了,

\d                   数字:[0-9]
X+                   X,一次或多次
\\d+就是连续的几个数字,也就是你这道题中的整数部分
\\.因为.代表任意字符,所以要转义
(\\.\\d+)就是表示有一个点后面接一个或者多个数字,并将其放在一个组里
X?                  X,一次或一次也没有
\\d+(\\.\\d+)?
表示有一个或者多个数字,后面有0个或者一个这样的组,这个组里面是有一个。和至少一个数字组成


              

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马