Каков наилучший способ извлечь данные из этого ответа? - PullRequest
0 голосов
/ 12 декабря 2011

От банка я получил этот ответ, когда клиент выполняет транзакцию, и мне нужно получить данные из этого ответа.Как я могу это сделать? ..

Формат ответа банка:

{ReceiptNo} Подтверждено. {TransactionTime: d} в {TransactionTime: t} {Сумма} получено от {1stFor2ndPartyName} {phoneNo}.Номер счета {AccountNumber} Баланс новой утилиты равен {SecondPartyBalance}

Строки, выделенные жирным шрифтом, будут заменены фактическими значениями, а формат полученне может быть изменено.

Пример ответа:

111111 Подтверждено.2011-11-11 в 14:30 10 получено от ABCF 457878984545. Номер счета 24554455122 Баланс новой утилиты составляет 1000

Я борюсь с этим.

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011
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 голос
/ 12 декабря 2011

Вы можете использовать разделение: если формат не может быть изменен, быстрее использовать разделение.

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];
...
1 голос
/ 12 декабря 2011

Я бы использовал регулярное выражение - см. http://docs.oracle.com/javase/tutorial/essential/regex/ и http://www.vogella.de/articles/JavaRegularExpressions/article.html.

String pattern = "/ (\ d +) Подтверждено \. Вкл (\ 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...