3

我是否误解了有关 Java 正则表达式的内容?以下内容不应该与前导零匹配:

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}
4

5 回答 5

4

String.match想要匹配整体String,而你的正则表达式^0 匹配。

相反,您需要一个正则表达式:0.*,这意味着“字符串以 0 开头,后跟零个或多个字符”。或者,根据您的需要,0\d*,这意味着“字符串以 0 开头,后跟零个或多个数字”,这就是您的示例输入的样子。

if ("0115724848".matches("0\\d*"))
    System.out.println("leading zero.");
于 2012-08-25T20:20:29.093 回答
4

matches尝试将模式与整个输入字符串匹配......并且您的输入字符串不仅仅是“字符串开头后跟 0”。

要么你需要"0.*"(这^是不必要的,因为matches将匹配整个字符串)或者你可以创建一个Pattern然后使用:

if (pattern.matcher(text).lookingAt())

当然,不清楚你为什么在这里使用正则表达式,因为你可以使用:

if (text.startsWith("0"))
于 2012-08-25T20:22:50.397 回答
2

这是您应该使用的模式:

^0.*

还有为什么不使用startsWith("0") - 更简单

于 2012-08-25T20:20:10.227 回答
0

检查此代码..它应该可以工作。

public class Testit {
    public static void main(String[] args) {
        format("0115724848");
    }


    private static void format(String elementToFormat) {
        if (elementToFormat.matches("^0.*")) {
            System.out.println("leading zero:" + elementToFormat);
        } else {
            System.out.println("no leading zero:" + elementToFormat);
        }
    }
}
于 2012-08-25T20:33:43.287 回答
0

此正则表达式将匹配带有前导零的数字,但不匹配“0”:/^0+[1-9]/

于 2017-08-22T17:16:26.750 回答