Как сделать проверку отдельных символов переменной?
Написал код по проверке румынского СНП (аналог кода паспорта). Там каждая цифра вычисляется по формуле, я сделал ввод кода через пробел, чтобы проверять числа, можно ли сделать так что бы код писался целой строкой, а не через пробел каждую цифру и при этом что бы была проверка, нужная часть кода под Фибоначи начинается:
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
System.out.println("Input 13 СNP numbers, and put whitespaces after each number. After press ENTER:");
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String[] split1 = s1.split("\\s+");
int q = Integer.parseInt(split1[0]);
int w = Integer.parseInt(split1[1]);
int e = Integer.parseInt(split1[2]);
int r = Integer.parseInt(split1[3]);
int t = Integer.parseInt(split1[4]);
int y = Integer.parseInt(split1[5]);
int u = Integer.parseInt(split1[6]);
int i = Integer.parseInt(split1[7]);
int o = Integer.parseInt(split1[8]);
int p = Integer.parseInt(split1[9]);
int s = Integer.parseInt(split1[10]);
int d = Integer.parseInt(split1[11]);
int f = Integer.parseInt(split1[12]);
if (f == (q * 2 + w * 7 + e * 9 + r * 1 + t * 4 + y * 6 + u * 3 + i * 5 + o * 8 + p * 2 + s * 7 + d * 9) % 11 && f != 1) {
System.out.println(true);
//CNP Румынии
//прописал дополнительное условие так как если по формуле сумма равна 10, то в CNP будет последняя цифра 1, а в остальных случая последняя цифра равна той, что выходит из формулы
} else if (f == 1 && (q * 2 + w * 7 + e * 9 + r * 1 + t * 4 + y * 6 + u * 3 + i * 5 + o * 8 + p * 2 + s * 7 + d * 9) % 11 == 10){
System.out.println(true);
} else {
System.out.println(false);
}
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Можно, разумеется. Замените свой сплит String[] split1 = s1.split("\\s+"); на такой String[] split1 = s1.split("");
Но это как-то странно и сложно выглядит. Может как-то так попробовать:
import java.util.Scanner;
public class Calculator {
private final static int [] OPERATION_NUMBERS = {2,7,9,1,4,6,3,5,8,2,7,9};
public static void main(String[] args) {
System.out.println("Input 13 СNP numbers, and put whitespaces after each number. After press ENTER:");
System.out.println(new Scanner(System.in).nextLine());
}
public static boolean check(String cnpNumbers) {
try {
final String[] args = cnpNumbers.split("");
if (args.length != 12) return false;
int result = 0;
for (int i = 0; i < OPERATION_NUMBERS.length; i++)
result = result + OPERATION_NUMBERS[i] * Integer.parseInt(args[i]);
int f = Integer.parseInt(args[12]);
return (f == result % 11 && f != 1) || (f == 1 && (result) % 11 == 10);
} catch (NumberFormatException e) {
return false;
}
}
}