2011-12-12 55 views
-1

从银行我收到这个回应,当客户做一个交易时,我需要grep从这个回应的数据。我怎样才能做到这一点..?从此响应中提取数据的最佳方式是什么?

银行响应格式:

{ReceiptNo}证实。上{TRANSACTIONTIME:d}{TRANSACTIONTIME:吨}{金额}{1stFor2ndPartyName}{PHONENO}接收。帐号{}账户号码新实用余额为{} SecondPartyBalance

在大胆的字符串会由实际值取代,格式将不会改变。

样本响应:

111111确认。 2011-11-11 14:30 10从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}) 在([\ d \:] + )(\ d +)....“;

然后用$ 1,$ 2,$ 3 ..你ReceiptNo等。

所以,你会最终

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 

就像下面的解决方案2。请阅读http://docs.oracle.com/javase/tutorial/essential/regex/http://www.vogella.de/articles/JavaRegularExpressions/article.html

+0

似乎更好的解决方案,请你多解释..? –

1

您可以使用拆分: 如果无法更改格式,则使用拆分会更快。

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"); 
} 
相关问题