Способ проверки "голландского" почтового индекса в java - PullRequest
2 голосов
/ 25 февраля 2020

Я пытаюсь создать метод в java для проверки голландского почтового индекса. голландский почтовый индекс состоит из 6 символов, которые содержат 4 цифры (первые 4 знака) и 2 буквы (последние 2 знака), например, 1010AB.

Я сделал логическое значение для возврата false, если почтовый индекс не соответствует стандарту, и true, если это так. Я застреваю с проверкой последних 2 букв.

Я создал al oop для первых 4 чисел, но я не знаю, как go дальше отсюда проверить буквы.

My java Метод:

public static boolean checkPostcode(String postCode) {


        boolean value = false;
        if (postCode.length() == lengthPost) {
            for (int i = 0; i < postCode.length(); i++) {
                if (i <= 4) {
                    if (Character.isDigit(postCode.charAt(i)) {
                        value = true;

                 else{
                            if (Character.isLetter(postCode.charAt(i))) {
                                value = true;
                            }
                        }
                    }
                }
            }

        }
     return value;
    }

Вы игнорируете последнее, потому что это тот момент, когда я застреваю ...

Если кто-то может мне помочь, это было бы здорово !!

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 25 февраля 2020

Решение с использованием регулярных выражений:

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(checkPostcode("1234AB"));
        System.out.println(checkPostcode("5678MN"));
        System.out.println(checkPostcode("0123AB"));
        System.out.println(checkPostcode("1023AB"));
        System.out.println(checkPostcode("1230AB"));
        System.out.println(checkPostcode("AB1234"));
        System.out.println(checkPostcode("123456"));
        System.out.println(checkPostcode("ABCDEF"));
        System.out.println(checkPostcode("12345A"));
        System.out.println(checkPostcode("A12345"));
        System.out.println(checkPostcode("A12345B"));
        System.out.println(checkPostcode("1ABCDE6"));
        System.out.println(checkPostcode("1ABCD6"));
    }

    public static boolean checkPostcode(String postCode) {
        return postCode.matches("[1-9]{1}[0-9]{3}[a-zA-Z]{2}");
    }
}

Вывод:

true
true
false
true
true
false
false
false
false
false
false
false
false

Решение без регулярных выражений:

public static boolean checkPostcode(String postCode) {
    if (postCode.length() != lengthPost || postCode.charAt(0) == '0') {
        return false;
    }
    if (postCode.length() == lengthPost) {
        for (int i = 0; i < postCode.length(); i++) {
            if (i < 4 && Character.isLetter(postCode.charAt(i))) {
                return false;
            }
            if (i > 3 && Character.isDigit(postCode.charAt(i))) {
                return false;
            }
        }
    }
    return true;
}
1 голос
/ 25 февраля 2020

Хотя вы можете решить эту проблему с помощью регулярных выражений, ее также можно решить в соответствии с выбранными вами правилами. Я написал бы два вспомогательных метода: один для проверки того, что все символы в данной подпоследовательности String являются цифрами, а другой для проверки букв. Например,

private static boolean allDigits(String s, int start, int end) {
    for (int i = start; i < end; i++) {
        if (!Character.isDigit(s.charAt(i))) {
            return false;
        }
    }
    return true;
}

private static boolean allLetters(String s, int start, int end) {
    for (int i = start; i < end; i++) {
        if (!Character.isLetter(s.charAt(i))) {
            return false;
        }
    }
    return true;
}

Тогда checkPostcode может делегировать этим двум методам. Например,

public static boolean checkPostcode(String postCode) {
    if (postCode != null && postCode.length() == 6) {
        return allDigits(postCode, 0, 4) && allLetters(postCode, 4, 6);
    }
    return false;
}

И если вы решите использовать регулярное выражение , скомпилируйте его с Pattern для повышения производительности. Мол,

private static Pattern POSTCODEPATTERN = Pattern.compile("\\d{4}[A-Za-z]{2}");

public static boolean checkPostcode(String postCode) {
    return postCode != null && POSTCODEPATTERN.matcher(postCode).matches();
}
1 голос
/ 25 февраля 2020

Если я правильно понимаю, первые 4 символа являются цифрами, поэтому условие if должно быть

(i < 4) 

, потому что в противном случае вы проверяете первые 5 символов на ди git

...