Sto facendo sotto i passaggi.Estratto (analisi) importo e descrizione da sms BIZ (Transazione)
partita sms con regex
se contiene parola chiave specificata quindi ottenere valori da corpo sms come quantità, descrizione (motivo della transazione), numero di conto (se bancomat ritirare), tipo di transazione (debito/credito)
questa espressione regolare non corrisponde a tutti i tipi di sms bancari/di transazione quindi non è efficiente, esiste un altro modo per identificare il messaggio bancario.
esempio sms:
1) Gentile Cliente, il vostro numero di conto XXXXXX6377 è stato accreditato da Rs 215.000 essere DBT/DBTL trasferimento di fondi on 19/05/2015 - BANCA CENTRALE DELL'INDIA
2) A/c NN5715 addebitato per Rs 2000; ATM WDL. A/c Bal (sub to chq realisatn) Rs13286.23 su 24APR 21: 19hr. Chiama 1800226999 per bloccare la tua carta se non utilizzata da te.
3) Gentile Cliente, La vostra Ac XXXXXXXX5666 è accreditati con INR8,922.00 il 16 febbraio Info. INF * 000080483346 * STIPENDIO. Il tuo Net Available Bal è INR 8.922,00.
private static ArrayList<SmsDto> parsevalues(ArrayList<SmsDto> body_val) {
ArrayList<SmsDto> resSms = new ArrayList<>();
for (int i = 0; i < body_val.size(); i++) {
SmsDto smsDto = body_val.get(i);
Pattern regEx
= Pattern.compile("(?:inr|rs)+[\\s]*[0-9+[\\,]*+[0-9]*]+[\\.]*[0-9]+");
// Find instance of pattern matches
Matcher m = regEx.matcher(smsDto.getBody());
if (m.find()) {
try {
Log.e("amount_value= ", "" + m.group(0));
String amount = (m.group(0).replaceAll("inr", ""));
amount = amount.replaceAll("rs", "");
amount = amount.replaceAll("inr", "");
amount = amount.replaceAll(" ", "");
amount = amount.replaceAll(",", "");
smsDto.setAmount(Double.valueOf(amount));
if (smsDto.getBody().contains("debited") ||
smsDto.getBody().contains("purchasing") || smsDto.getBody().contains("purchase") || smsDto.getBody().contains("dr")) {
smsDto.setTransactionType("0");
} else if (smsDto.getBody().contains("credited") || smsDto.getBody().contains("cr")) {
smsDto.setTransactionType("1");
}
smsDto.setParsed("1");
Log.e("matchedValue= ", "" + amount);
if (!Character.isDigit(smsDto.getSenderid().charAt(0)))
resSms.add(smsDto);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e("No_matchedValue ", "No_matchedValue ");
}
}
return resSms;
}
grazie per un swer è questo regx darà informazioni separate transazione –
grazie, ma ottengo solo prima cifra di importo utilizzando [Ii] [Nn] [Rr] (\\ s *. \\ s * \\ d *) espressione reguler.come posso io Ottieni tutte le cifre –