在java中检查"dutch"邮政编码的方法



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

我做了一个布尔值,如果邮政编码不在标准范围内,则返回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;
}

你忽略了最后一个,因为那是我陷入困境的地方。。。。

如果有人能帮助我那就太好了!!

提前感谢

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

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

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

(i < 4) 

因为否则,您将检查数字的前5个符号

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

sa、ss、sd无效(参考:https://en.wikipedia.org/wiki/Postal_codes_in_the_Netherlands(也要检查这些:

Pattern dutchZips = Pattern.compile("^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}", Pattern.CASE_INSENSITIVE);
return dutchZips.matcher(zip).matches();

最新更新