从此响应中提取数据的最佳方法是什么?

时间:2011-12-12 10:37:54

标签: java regex string

当我在客户端进行交易时,我从银行收到此响应,我需要从此响应中获取数据。我怎么能这样做??

银行回复格式:

  

{ReceiptNo} 确认。 {TransactionTime:d} {TransactionTime:t} {Amount} {1stFor2ndPartyName} {PHONENO} 即可。帐号 {AccountNumber} 新效用余额 {SecondPartyBalance}

粗体中的字符串将替换为实际值,格式不会更改。

样本回复:

  

111111确认。在2011-11-11 14:30 10从ABCF收到   457878984545.帐号24554455122新公用设施余额为1000

我正在努力。

3 个答案:

答案 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");
}

答案 1 :(得分:1)

  

我会使用正则表达式 - 请参阅   http://docs.oracle.com/javase/tutorial/essential/regex/和   http://www.vogella.de/articles/JavaRegularExpressions/article.html

     

String pattern =“/(\ d +)确认\。on(\ d {4} - \ d {1,2} - \ d {1,2})   at([\ d \:] +)(\ d +)....“;

     

然后使用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

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

答案 2 :(得分: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];
...