Java - 邮政编码验证器不起作用



我的邮政编码验证器遇到了一些问题,该验证器读取带有英国邮政编码的文本文件,然后在验证后返回 true 或 false。

下面是我遇到问题的代码部分(ZipCodeValidator),它是公开的,应该在一个名为ZipCodeValidator.java的文件中声明。然后(Zip)找不到符号。

public class ZipCodeValidator {
    private static String regex = "^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$";
    private static Pattern pattern = Pattern.compile(regex);
    public boolean isValid(String zipCode) {
        Matcher matcher = pattern.matcher(zip);
        return matcher.matches();
    }
}

以下是整个程序以供参考。任何帮助,不胜感激。

package postcodesort;
import java.util.*;
import java.util.Random;
import java.util.Queue;
import java.util.TreeSet;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.zip.ZipFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class PostCodeSort 
{
    Queue<String> postcodeStack = new LinkedList<String>();
    public static void main(String[] args) throws IOException 
    {
        FileReader fileReader = null;
        ZipCodeValidator zipCodeValidator = new ZipCodeValidator();
        // Create the FileReader object
        try {
            fileReader = new FileReader("postcodes1.txt");
            BufferedReader br = new BufferedReader(fileReader);
            String str;
            while((str = br.readLine()) != null) 
            {
                if(zipCodeValidator.isValid(str)){
                    System.out.println(str + " is valid");
                }
                else{
                    System.out.println(str + " is not valid");
                }
            }
        }
        catch (IOException ex) 
        {
            // handle exception;
        }
        finally 
        {
            fileReader.close();
        }
    }
}
public class ZipCodeValidator {
    private static String regex = "^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$";
    private static Pattern pattern = Pattern.compile(regex);
    public boolean isValid(String zipCode) {
        Matcher matcher = pattern.matcher(zip);
        return matcher.matches();
    }
}

可能是复制+粘贴问题,但Matcher matcher = pattern.matcher(zip);与方法参数zipCode不匹配。您是否在其他地方定义了zip,并可能对此进行验证?

当我添加读取文件代码时,就会出现我上面指定的问题

请确保在传入字符串之前清理字符串。要删除任何前导或尾随空格字符,请使用

if(zipCodeValidator.isValid(str.strip())){

最后,您的正则表达式仅与大写字母匹配。确保使用

str.strip().toUpperCase()

或更改您的正则表达式:

private static Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

最新更新