有 Java 编程相关的问题?

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

java正则表达式在尝试使alpha和非零无效时无效

编写了一个接收字符串并检查以下条件的方法:

  1. 如果字符串为“退出”,它将终止程序
  2. 如果字符串不是整数,则应返回“无效输入”
  3. 任何负整数和0都应返回“无效输入”

然而,当我通过10时,它返回为“无效输入”

请告知:

public static String validate(String input) {
    Pattern pattern = Pattern.compile(".*[^1-9].*");
    StringBuilder results = new StringBuilder();
    if (input.equals("quit")) {
        System.exit(1);
    } else if (!pattern.matcher(input).matches() == false) {
        results.append("Invalid input ");
        results.append("'");
        results.append(input);
        results.append("'");
    }
    return results.toString();
}

我现在做的有什么问题吗


共 (1) 个答案

  1. # 1 楼答案

    您的正则表达式字符串不允许存在零(而不仅仅是一个单独的零)

    也就是说,字符串".*[^1-9].*"正在寻找“任意数量的字符、非1-9的字符以及任意数量的字符”。当它找到零时,它会给出错误的结果

    查看What is the regex for "Any positive integer, excluding 0"了解如何更改此设置

    该页面上最有用的解决方案可能是regex [0-9]*[1-9][0-9]*(对于有效整数)。这允许前导零和/或内部零,这两者都可以存在于有效整数中。在使用^{}时,还可以确保这个正则表达式匹配整个输入,而不仅仅是其中的一部分(无需添加开头和结尾锚^{

    此外,第else if (!pattern.matcher(input).matches() == false)行可以更清楚地表达出来。。。。也许可以试试else if (pattern.matcher(input).matches())