当我在客户端进行交易时,我从银行收到此响应,我需要从此响应中获取数据。我怎么能这样做??
银行回复格式:
{ReceiptNo} 确认。 {TransactionTime:d} {TransactionTime:t} {Amount} {1stFor2ndPartyName} {PHONENO} 即可。帐号 {AccountNumber} 新效用余额 {SecondPartyBalance}
粗体中的字符串将替换为实际值,格式不会更改。
样本回复:
111111确认。在2011-11-11 14:30 10从ABCF收到 457878984545.帐号24554455122新公用设施余额为1000
我正在努力。
答案 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];
...