2016-06-06 2 views
1

영국 우편 번호 검사기를 미국 우편 번호 검사기로 바꾸는 방법이 궁금합니다. 현재 내 프로그램은 텍스트 파일에서 우편 번호를 읽고 유효한 영국 우편 번호인지 확인합니다. 이것은 잘 작동하지만 영국 포스트 코드 대신 미국 포스트 코드를 읽은 다음 유효성을 검사하고 싶습니다. 아래는 현재 사용중인 프로그램입니다.자바 - 영국 우편 번호 검사기에서 미국 우편 번호 검사기

package postcodesort; 

import java.util.*; 
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.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("usvalidcodes.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(); 
    } 

} 
} 

다음은 정규식을 통해 유효성 검사를 수행하는 코드의 일부입니다.

package postcodesort; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

/** 
* 
* @author ec1312017 
*/ 
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, Pattern.CASE_INSENSITIVE); 

public boolean isValid(String zipCode) { 
    Matcher matcher = pattern.matcher(zipCode); 
    return matcher.matches(); 
} 
} 

는 또한 텍스트 파일 내의 데이터의 작은 선택은 판독한다.

"01", "35,005", "AL", "ADAMSVILLE"86.959727,33.588437 포함했다 10616,0.002627

"05", "72001", "AR", "ADONA"92.903325,35.0469564940.00021

"06", "90804", "CA", "SIGNAL HILL" , 118.155187,33.782993,36092,0.001213

감사합니다. d. 질문이 있으시면 언제든지 문의하십시오.

+0

당신은 영국의 하나가 아니라 미국 우편 형식에 맞게 정규식 체크를 수정해야합니다. 몇 가지 예를 들어 미국 형식을 게시하면 올바른 정규식을 쉽게 찾을 수 있습니다. – Dave

+0

예, Dave가 말했듯이 예제가 필요합니다. 우편 번호가 5 자리 숫자 인 경우 확장 사물이 포함 된 경우와 다릅니다. – Laurel

+0

나는 내가 읽고있는 것에 대한 몇 가지 예를 게시했다. 그래서 나는 그것이 5 개의 숫자를 가지고 있고 처음 두 개의 숫자를 읽는다는 것을 읽고 싶다. 그래서이 "01", "35006", "AL"처럼. 10,000 개의 항목이 있기 때문에 그 부분을 읽고 검증해야합니다. – danbb

답변

0

간단한 해결책은 정규식을 변경하는 것입니다.

public class ZipCodeValidator { 

private static String regex = "^\d{5}(?:[-\s]\d{4})?$"; 
private static Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); 


public boolean isValid(String zipCode) { 
    Matcher matcher = pattern.matcher(zipCode); 
    return matcher.matches(); 
} 
} 

이것은 당신이 제공 zipcoes의 목록에 대해 유효성을 검사하지 것이다하지만 구현하기 위해 많은 간단합니다 :)

:이 질문에 regex for zip-code 그래서 클래스는 다음과 같습니다 정규식 ^\d{5}(?:[-\s]\d{4})?$

해야한다 제안

+0

정규 표현식을 사용하면이 데이터 형식을 사용할 수 있습니까? "01", "35005", "AL", "ADAMSVILLE", 86.959727,33.588437,10616,0.002627. – danbb

+0

궁극적으로 프로그램이 5 개의 숫자가있는 경우 항목을 읽고 우편 번호의 유효성을 검사하기를 원합니다.이 경우 "35005"가됩니까? 유효성을 확인한 후에는 해당 항목을 처음 두 숫자에서 가져올 특정 상태에 할당하려고합니다. 이 경우 "01". 그러나 그것은 또 다른 날입니다 :) – danbb

+0

우편 번호 목록에서 10,000 개의 데이터를 제거하지 않으려면 우편 번호 목록을 사용하여 어떻게 유효성을 검사 할 수 있습니까? – danbb

0

일반적으로 서비스를 인증하는 잘 설립 된 주소를 사용 하시길 권합니다. 왜냐하면 parsing and matching addresses is pretty complicated : 커다란 엉망이되는 많은 방법이 있기 때문입니다.

그러나 실제로 사용 사례는 구체적입니다. 항상 동일한 데이터 행을 가지며 행의 특정 지점에 5 자리 우편 번호가 있는지 확인하는 유효성 검사기 만 필요합니다.

public class ZipCodeValidator { 
    private static String regex = "^"\d{2}","\d{5}","\w{2}","[\w ]+",\d*\.?\d*,\d*\.?\d*,\d*,\d*\.?\d*$"; 
    private static Pattern pattern = Pattern.compile(regex, 
    Pattern.CASE_INSENSITIVE); 

    public boolean isValid(String entireLineFromFile) { 
     Matcher matcher = pattern.matcher(entireLineFromFile); 
     return matcher.matches(); 
    } 
} 

당신은 this example on regexr.com에 정규식으로 재생할 수 있습니다 : 그것은 데이터 당신이 얻고있는 말과 일치하도록

그래서, 여기에 내가 당신의 정규식 유효성 검사기 코드 편집을했습니다. 정규식에서 문자 위로 마우스를 가져 가면 각 부분의 의미를 알리는 팝업이 나타납니다.

(전체 공개 :. 내가 SmartyStreets, 주소 검사기 및 자동 완성 회사 근무)는