2011-12-12 2 views
-1

클라이언트가 트랜잭션을 수행 할 때 은행으로부터이 응답을 받았으며이 응답에서 데이터를 grep해야합니다. 어떻게해야합니까? ..?이 응답에서 데이터를 추출하는 가장 좋은 방법은 무엇입니까?

은행 응답 형식 :

가 {ReceiptNo}을 확인했다.{TransactionTime : t}에서 {금액} {} 1stFor2ndPartyName{} PHONENO로부터 수신 : {D}에 TransactionTime. 계좌 번호 는 {ACCOUNTNUMBER} 새로운 유틸리티 균형이다 {SecondPartyBalance} 굵은에서

문자열이 실제 값으로 대체되고, 형식이 변경되지 않습니다.

샘플 응답 : 확정

111,111. 14시 반 (10)에 2011-11-11는 ABCF 에서 수신에 457878984545. 계좌 번호 24554455122 새로운 유틸리티 균형 내가 함께 사투를 벌인거야 1000

입니다.

+0

WHYT (당신은 무엇을 시도?) – Mansuro

답변

1

내가 정규식을 사용하십시오 - http://docs.oracle.com/javase/tutorial/essential/regex/http://www.vogella.de/articles/JavaRegularExpressions/article.html를 참조하십시오.

문자열 패턴 = "/ (\ d +)에서 확인 (\ d {4} - \ d {1,2} - \ d {1,2}) at ([\ d \ :]) (\ d +) .... ";

그리고 등 당신의 ReceiptNo에 대한 $ 1, $ 2, $ 3 ...을 사용 ..

그래서 당신은 그냥 아래의 솔루션이 같은

Pattern regex = Pattern.compile(pattern); 
Matcher match = regex.matcher(yourString); 
if (!match.matches()) 
    return some error; 

String receiptNumber = match.group(1); 
String transactionOn = m.group(2); 
.... 

return above 

로 끝날 것입니다. http://docs.oracle.com/javase/tutorial/essential/regex/http://www.vogella.de/articles/JavaRegularExpressions/article.html을 읽으십시오.

+0

가 더 나은 솔루션을 것 같습니다 당신이 더 그것을 설명하시기 바랍니다 것입니다 ..? –

1

split을 사용할 수 있습니다. 형식을 변경할 수 없으면 분할을 사용하는 것이 더 빠릅니다.

String tokens ="111111 Confirmed. on 2011-11-11 at 14:30 10 received from ABCF 457878984545. Account Number 24554455122 New Utility balance is 1000".trim().split(" "); 

String receiptNo = tokens[0]; 
... 
2
Pattern p = Pattern.compile("(.+) Confirmed\\. on (.+) at (.+) (.+) received from (.+) (.+)\\. Account Number (.+) New Utility balance is (.+)"); 
Matcher m = p.matcher(anInput); 
if (m.matches()) { 
    String receiptNo = m.group(1); 
    String transactionDate = m.group(2); 
    String transactionTime = m.group(3); 
    ... 
    String secondPartyBalance = m.group(8); 

} else { 
    throw new RuntimeException("Bank report in wrong format"); 
} 
관련 문제