2014-04-06 2 views
1

나는 다음과 같은 문자열을 가지고문자열에서 날짜 및 개수 요소를 가져 오는 방법은 무엇입니까?

String str1 = "Peter L. Douglas 04/02/1984 X1 X5 YY" ; 

난 내가 특히 후 요소를 계산, 가장 효율적인 방법으로이 작업을 수행 할 수있는 방법을 잘 모르겠습니다

String str1_name = "Peter L. Douglas" ; 
String str1_date = "04/02/1984" ; 
String str1_nbr = "3" ;  // 3 is three elements after date , i.e. X1 X5 YY 

을 다음과 같은 세 개의 문자열을 얻을 필요 날짜


다른 가능한 문자열은

있습니다

String str1 = "Alexander Evanston 05/02/1986 X5 YY" ;

+0

당신의 문자열의 실제 패턴이 무엇입니까? 후행 요소는 항상 두 문자가됩니까? 충분한 정보를 제공하지 않았습니다. –

답변

3

당신의 문자열의 세 부분으로, 당신은

^([A-Za-z. ]+) ((?:[0-9]{2}/){2}[0-9]{4}) (.*)$ 

Regular expression visualization

Debuggex Demo

이름은

을 사용할 수 있습니다 얻으려면 캡처 그룹 1, 2 날짜,이다 "X"는 3 개입니다.이 정규식은 날짜가 항상 유효하다고 가정합니다. 적절한 날짜를 확실히해야한다면 this answer을 읽을 수 있습니다. 정규식을 사용하여 숫자 범위의 유효성을 검사하는 방법에 대해 썼습니다.

또한 [0-9] 대신 \d를 사용할 수있는 동안 \d 예를 들어 .NET에서가 아닌 미국의 번호를 캡처 할 수 있습니다로, [0-9]이 더 보편적 있습니다. 자세한 내용은 herehere입니다. DD (날짜 패턴을 찾기이 하나

을 시도

int xPieceCount = matcher.group(3).split(" ").length(); 
2

:


는 "X"조각, 단지 분할 그룹 세의 수를 가져온 다음 결과 배열 요소를 계산하려면/MM/YYYY) 먼저 다른 사람들도 그만큼 쉽게 얻을 수 있습니다.

String str1 = "Peter L. Douglas 04/02/1984 X1 X5 YY"; 
    Pattern pt = Pattern.compile("\\d\\d/\\d\\d/\\d\\d\\d\\d"); 

    Matcher m = pt.matcher(str1); 

    if (m.find()) { 
     System.out.println(str1.substring(0, m.start()).trim()); 
     System.out.println(m.group()); 
     System.out.println(str1.substring(m.end()).trim().split("\\s+").length); 
    } 

출력

Peter L. Douglas 
04/02/1984 
3 
+0

재미있는 생각은 단일 날짜 - 정규식에 논리를 고정하는 것입니다. +1 – aliteralmind

관련 문제