Как написать буквенно-цифровую проверку диапазона в java, которая проверит, соответствует ли данное буквенно-цифровое значение в пределах диапазона.Алфавитно-цифровой измеритель диапазона - независимо от того, находится ли B3 в B1: B10
Например: вход: B3, диапазон: В1: В10 - истинная
В1, В1: В10 - истинная
В10, В1: В10 - истинная
В1, В3: В10 - ложные
Моя попытка терпит неудачу для более чем 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;
}
}
В чем проблема с этим кодом? Что должно произойти для «A1: B2», «B1»?? –