【问题标题】:Method to check "dutch" postal code in java在java中检查“荷兰”邮政编码的方法
【发布时间】:2020-06-09 15:36:35
【问题描述】:

我正在尝试在 java 中创建一个方法来验证荷兰邮政编码。 荷兰邮政编码由 6 个字符组成,其中包含 4 个数字(前 4 个字符)和 2 个字母(后 2 个字符),例如 1010AB。

如果邮政编码不在标准范围内,我创建了一个布尔值返回 false,如果是,则返回 true。 我一直在检查最后两个字母。

我已经为前 4 个数字创建了一个循环,但我不知道如何从这里进一步检查字母。

我的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;
    }

你忽略了最后一个 else,因为那是我卡住的地方....

如果有人可以帮助我,那就太好了!

提前致谢

【问题讨论】:

  • 这听起来用正则表达式会更容易解决

标签: java methods boolean


【解决方案1】:

使用正则表达式的解决方案:

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到9之间,因为它不能为0。如果我使用正则表达式,我该怎么做?
【解决方案2】:

如果我理解正确的话,前4个符号是数字,所以if条件应该是

(i < 4) 

因为否则你会检查前 5 个符号的数字

【讨论】:

    【解决方案3】:

    虽然您可以使用正则表达式来解决这个问题,但也可以按照您选择的路线来解决它。我会编写两种辅助方法,一种用于检查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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2020-01-05
      • 2014-08-26
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多