有 Java 编程相关的问题?

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

java字母数字范围检查器B3是否在B1:B10中

如何用java编写字母数字范围检查器,检查给定的字母数字值是否在范围内

例如: 输入:B3,范围:B1:B10-真
B1,B1:B10-正确
B10,B1:B10-正确
B1,B3:B10-错误

我的尝试在超过1位数的情况下失败,例如在B3:B10中,第二个前缀应该是“B”,num应该是10,但我得到了B1和0。正则表达式有什么问题吗

public class Main {

public static final String RANGE_PATTERN = "(.+)(\\d)+:(.+)(\\d)+";
public static final String INPUT_PATTERN = "(.+)(\\d)+";
public static final Pattern P1 = Pattern.compile(RANGE_PATTERN);
public static final Pattern P2 = Pattern.compile(INPUT_PATTERN);

public static void main(String[] args) {
    System.out.println(checkWithInRange("B3:B10", "B7"));
}

public static boolean checkWithInRange(String range, String input) {
    Matcher m1 = P1.matcher(range);
    Matcher m2 = P2.matcher(input);
    if (m1.find() && m2.find()) {
        String prefix1 = m1.group(1);
        String num1 = m1.group(2);
        String prefix2 = m1.group(3);
        String num2 = m1.group(4);

        String inputPrefix = m2.group(1);
        String inputNum = m2.group(2);

        if (prefix1.equalsIgnoreCase(prefix2) && prefix2.equalsIgnoreCase(inputPrefix)) {
            int n1 = Integer.parseInt(num1);
            int n2 = Integer.parseInt(num2);
            int n3 = Integer.parseInt(inputNum);
            if (n3 >= n1 && n3 <= n2) {
                return true;
            }
        }
    }
    return false;
}
}

共 (2) 个答案

  1. # 1 楼答案

    使用"(.+?)...接收最短序列(无数字)。或者更好的是"(\\D+)...

    使用(\\d+)而不是(\\d)+,这样m.group(i)就是整个数字串

    不需要对组使用空检查,也许您想要一个可选前缀:(\\D*)

    您是打算find()还是应该匹配整个字符串:matches()

  2. # 2 楼答案

    多亏了乔普·艾根

    我改变了我的正则表达式如下

    public static final String RANGE_PATTERN = "(\\D+)(\\d+):(\\D+)(\\d+)";
    public static final String INPUT_PATTERN = "(\\D+)(\\d+)";
    

    现在它可以与上面的代码一起工作