Строка «K2S 1W3333333» может быть перехвачено проверять на фиксированная длина строки. Смотрите ниже фрагмент кода, в частности, линии
int len = postal.length();
if ((len == 7) && (postal.charAt(3) != ' '))
и/или ...
} else if ((len != 6) && (len != 7)) {
После прочтения некоторых основных правил Postal codes in Canada, вот быстрый фрагмент, который проверяет на валидность:
public class App {
public static boolean checkCode(String postal) {
if (postal == null || postal.isEmpty()) {
System.out.println("Empty postal code");
return false;
}
int len = postal.length();
if ((len == 7) && (postal.charAt(3) != ' ')) {
System.out.println("Invalid postal code length (7 characters requires space in middle of code)");
return false;
} else if ((len != 6) && (len != 7)) {
System.out.println("Invalid postal code length (6 characters required)");
return false;
}
if (len == 7) {
postal = postal.replace(" ", "");
len = postal.length();
}
final char[] invalidUpLetters = { 'D', 'F', 'I', 'O', 'Q', 'U' };
final char[] invalidLowLetters = { 'd', 'f', 'i', 'o', 'q', 'u' };
for (int i = 0; i < len; ++i) {
final char c = postal.charAt(i);
if (i % 2 == 0) {
if (!Character.isLetter(c)) {
System.out.println("Invalid letter at postal code string index: " + i);
return false;
}
for (int j = 0; j < invalidUpLetters.length; ++j) {
if ((c == invalidUpLetters[j]) || (c == invalidLowLetters[j])) {
System.out.println("Invalid letter used in postal code, string index: " + i);
return false;
}
}
if ((i == 0) && (c == 'W' || c == 'w' || c == 'Z' || c == 'z')) {
System.out.println("First position letter cannot be W or Z");
return false;
}
} else if ((i % 2 == 1) && (!Character.isDigit(c))) {
System.out.println("Invalid digit at postal code string index: " + i);
return false;
}
}
return true;
}
public static void main(String[] args) {
args = new String[] { "K2S 1W3333333", "K2S 1W3", "K2S1W3" };
System.out.println("is valid postal? " + (checkCode(args[0]) ? "Yes" : "No"));
System.out.println("is valid postal? " + (checkCode(args[1]) ? "Yes" : "No"));
System.out.println("is valid postal? " + (checkCode(args[2]) ? "Yes" : "No"));
}
}
Это обширная проверка, которая включает в себя логику для проверки букв/цифр в соответствующих индексах, а также если первая буква действительна или нет, а также если буквы должны быть исключены вместе. Фрагмент также включает проверку на добавление пробела в середине 6-значного почтового индекса или нет. Будьте осторожны с персонажами!
Вы также можете удалить System.out.println() из метода checkCode() и придерживаться метода booleans - это поможет очистить часть отладки и упростить чтение кода - ради простота (просто нужно использовать метод, чтобы проверить, является ли строка допустимым почтовым индексом Канады или нет).
Редактировать: Если вы получаете больше вариантов ввода почтовых индексов, таких как «K2S, 1W3», как указано в исходном посте, рассмотрите возможность нормализации/разбора символов, как показано в моем фрагменте, чтобы более легко прочитать почтовые индексы.
Cheers
Вы считаете, что используете регулярное выражение? Кажется, вы можете быть новичком в программировании. Это ваш лучший подход. Если это назначение класса, и вы не можете использовать регулярное выражение, вам необходимо поддерживать счетчик символов. – mba12
Не делайте '> = 65',' <= 90', '> = 48' и '<= 57'. Он скрывает намерение. Используйте '> = 'A'',' <= 'Z'', '> =' 0'' и '<= '9''. – Andreas
@ Аndreas Я бы хотел, но учитель хочет, чтобы я сделал это таким образом. – JimmyJeans