有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

RegExp-GWT/Javascript的java测试方法

我想通过使用正则表达式来检测String是否为十进制。我的问题更多地是关于如何使用正则表达式机制,而不是检测aString是十进制。我使用GWT提供的RegExp

        String regexDecimal = "\\d+(?:\\.\\d+)?";
        RegExp regex = RegExp.compile(regexDecimal);
        String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.5" };
        for (int i = 0; i < decimals.length; i++) {
            System.out.println(decimals[i] + " "
                    + decimals[i].matches(regexDecimal) + " "
                    + regex.test(decimals[i]) + " "
                    + regex.exec(decimals[i]));
        }

输出:

one false false null
+2 false true 2
-2 false true 2
.4 false true 4
-.4 false true 4
.5 false true 5
2.5 true true 2.5

我希望两种方法String.matches()RegExp.test()返回相同的结果

  1. 那么两者之间的区别是什么呢 两种方法
  2. 如何使用RegExp.test()获得相同的行为

共 (2) 个答案

  1. # 1 楼答案

    我不知道有什么不同,但我想说RegExp.test()是正确的,因为只要字符串中有一个数字,正则表达式就会匹配,而且String.matches()的行为就像正则表达式周围的锚一样

    \\d+(?:\\.\\d+)?
    

    您的非捕获组是可选的,因此一个\\d[0-9])就足以匹配,无论周围是什么

    当你向正则表达式添加锚时,这意味着它必须从头到尾匹配字符串,然后RegExp.test()可能会显示相同的结果

    ^\\d+(?:\\.\\d+)?$
    
  2. # 2 楼答案

    尝试将正则表达式改为

    "^\\d+(?:\\.\\d+)?$"
    

    解释
    双重逃逸是因为我们在爪哇。。。
    regex start with ^强制regex从字符串的最开始匹配。
    regex end with $强制regex从字符串的最末端匹配

    这就是你应该得到字符串的方式。匹配()以执行与GWT RegExp相同的操作。测试()