Java - Zip Code Validator не работает?

У меня есть несколько проблем с моим валидатором почтового индекса, который читает текстовый файл с британскими почтовыми индексами, а затем возвращает значение 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();
    }
}

1 ответ

Решение

Возможно, проблема копирования + вставки, но 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);
Другие вопросы по тегам