注释:收集各个银行的储蓄卡的存取操作接收到的短信内容信息;

招商银行:95555
转入
模板:您账户1523于11月01日21:23ATM存款人民币8000.00,余额8402.39[招商银行] 

支出
模板:您账户1523于10月03日21:05直付通/快捷支付扣款人民币99.50,余额1123.59[招商银行] 

光大银行:95595
收入
模板:xx向您尾号6469账户15:24转入8000元,余额为8654.78元,摘要:网银跨行汇款。[光大银行] 

支出
尾号6469账户11:56支出32.34元,余额88.74元,摘要:网上支付 支付宝 支付宝[光大银行] 

工商  : 95588 
收入
你尾号8888卡12日19:30工商银行收入(这个显示的名字)10元,余额10.00元。【工商银行】

支出
你尾号8888卡12日19:30POS(或者的ATM)支出(消费(ATM没有这个括号和括号里的内容))10元,余额10.00元。【工商银行】

中国银行:95566
收入
您的个人账户8888于2014-11-03 13:48:43 存入人民币1000.00元,交易后余额5000.00元【中国银行】

支出
您的个人账户8888于2014-07-31 10:09:50 网银支取人民币8888.00元,交易后余额123.00元【中国银行】 

建设银行:95533
收入
您尾号8199的储蓄卡账户10月26日14时3分ATM存款收入人民币2786.07元,活期余额3443.16元。[建设银行]

支出
您尾号8199的储蓄卡账户11月5日16时1分ATM取款支出人民币300.00元,活期余额71.16元。[建设银行]
 
平安银行:95511
收入
10月30日11时03分,账户*[9002]存RMB485,000.00元成功,现余额561,752.68元【平安银行】

支出
11月03日09时51分,账户*[9002]取RMB3,700.00元成功,现余额6,749.68元【平安银行】

成都银行:96511
收入
【成都银行】您尾号为2352的卡于10月7日16时57分行内ATM存款人民币1,500元。公交次卡、电卡充值,我行营业点一站搞定

支出
【成都银行】您尾号为2352的卡于10月17日19时13分活期取款人民币700元。49天理财在售预期年化收益5-5.1%

德阳银行:96836
收入
【德阳银行】您尾号4625账户于10月15日 17:04小额入账人民币2092.82元。余额2094.98元。随心贷助您圆梦之贷

支出
【德阳银行】您尾号4625账户于10月26日 10:38ATM取款人民币500.00元。余额1157.30元。开个人网银 移动银行UK免费送

民生银行:95568
支出
账户*8844于11月04日08:13支出¥100.00元,可用余额9800.00元。取款:86310138成都市红星中路四段199号蜀源大厦。【民生银行】


农业银行:95599
支出
【四川农行】您好:您的账户6228***1813于20141012现支(分行营业部)-1400.00元,余额498.58元

截取的代码

String pa1="10月30日11时03分,账户*[9002]存RMB485,000.00元成功,现余额561,752.68元【平安银行】";
        String pa2="11月03日09时51分,账户*[9002]取RMB3,700.00元成功,现余额6,749.68元【平安银行】";
        String pa3="【成都银行】您尾号为2352的卡于10月7日16时57分行内ATM存款人民币1,500元。公交次卡、电卡充值,我行营业点一站搞定";
        String pa4="【成都银行】您尾号为2352的卡于10月17日19时13分活期取款人民币700元。49天理财在售预期年化收益5-5.1%";
        
        parseMsg(pa1);
        parseMsg(pa2);
        parseMsg(pa3);
        parseMsg(pa4);

private
static void parseMsg(String str){ Map<String,String>da=new HashMap<String,String>(); String [] back={"招商银行","光大银行","工商银行","中国银行","建设银行","平安银行", "成都银行","德阳银行","民生银行","四川农行" }; for (String string : back) { if(str.contains(string)) da.put("银行", string); } String mh=":"; String mh1=":"; String dian="."; String duanxian="-"; String space=""; String z_douhao=","; String e_douhao=","; String xing="*"; int yyc=0; int wyc=0; boolean preIsNumber=false;//上一个东西是否是数字 Map<String,String>map=new HashMap<String,String>(); String num=""; String ss=""; char[] c = str.toCharArray(); JSONObject j=new JSONObject(); for(int i=0;i<str.length();i++){ String getc=(c[i]+"").trim(); if(getc.equals(",")||getc.equals("。")) { if(ss.equals("元")){ ss=ss.substring(0, ss.lastIndexOf("元")); } continue; } try{ Integer nn=Integer.parseInt(c[i]+""); wyc++;//无异常++ preIsNumber=true; num+=nn; }catch (Exception e) { if(getc.equals(mh)||getc.equals(dian)){ if(preIsNumber){//上一个东西是数字,加在数字后面 num+=c[i];//中文加上冒号 }else{ //上一个东西是不数字,加在字符串后面 ss+=c[i]; } continue; } if(getc.equals(mh1)||getc.equals(dian)){ if(preIsNumber){//上一个东西是数字,加在数字后面 num+=c[i];//中文加上冒号 }else{ //上一个东西是不数字,加在字符串后面 ss+=c[i]; } continue; } if(getc.equals(duanxian)||getc.equals(dian)){ num+=c[i];//短线 continue; } if(getc.equals(space)||getc.equals(dian)){ num+=c[i];//空字符串 continue; } if(getc.equals(z_douhao)||getc.equals(dian)){ num+=c[i];//中文逗号 continue; } if(getc.equals(e_douhao)||getc.equals(dian)){ num+=c[i];//英文逗号 continue; } if(getc.equals(xing)||getc.equals(dian)){ num+=c[i];//星号* continue; } if(wyc>0){ j.put(ss.trim(), num.trim()); map.put(ss.trim(), num.trim()+""); yyc=0; wyc=0; ss=""; num=""; } yyc++;//有异常++ ss+=c[i]; } } Iterator keys = j.keys(); boolean haszhanghao=false; int size = j.size(); for(int jsonNum=0;jsonNum<size;jsonNum++){ while (keys.hasNext()) { String k=keys.next().toString(); if(!haszhanghao){ if(k.contains("账户")||k.contains("尾号")){ { String string = j.getString(k);//取得账户的数字 da.put("尾号",getNum(string)); haszhanghao=true; } } } /// //存|存款|转入|转|收入|收|存入|入账"; if(k.contains("存")||k.contains("存款")||k.contains("转入")||k.contains("转")|| k.contains("收入")||k.contains("收")||k.contains("存")||k.contains("入账")||k.contains("存入")){ { String string = j.getString(k);//取得账户的数字 String value=string.toCharArray()[0]+""; if(string.contains("-")&&Pattern.compile("[0-9]*").matcher(value).matches()){ continue; } if(value.contains("+")){ da.put("收入", string.substring(1, string.length())); } else{ da.put("收入",string); } da.put("type", "收入"); } } /// //"快捷支付扣款|快捷支付|支付|支出|扣|扣款|支取|取款|取出|取|现支" if(k.contains("快捷支付扣款")||k.contains("快捷支付")||k.contains("支付")||k.contains("支出")||k.contains("扣")||k.contains("扣款")|| k.contains("支取")||k.contains("取款")||k.contains("取出")||k.contains("取")||k.contains("现支")){ { String string = j.getString(k); String value=string.toCharArray()[0]+""; if(string.contains("-")&&Pattern.compile("[0-9]*").matcher(value).matches()){ continue; } if(value.contains("-")){ da.put("支出", string.substring(1, string.length())); }else{ da.put("支出",string); } da.put("type", "支出"); } } /// //"余额|余"; if(k.contains("余")||k.contains("余额")){ { String string = j.getString(k); String value=string.toCharArray()[0]+""; if(string.contains("-")&&Pattern.compile("[0-9]*").matcher(value).matches()){ continue; } //英文逗号 if(value.equals(",")){ da.put("余额", string.substring(1, string.length())); } //中文逗号 else if(value.contains(",")){ da.put("余额", string.substring(1, string.length())); }else{ da.put("余额",string); } } } } } System.out.println("----------结果-------"); System.out.println(da.toString()); } //是否是尾号,账号。假如有**号,借入最后面的4位 至少都是4位 private static String getNum(String str){ try{ if(str.length()<4){ return ""; }else { Pattern pattern = Pattern.compile("[0-9]*"); if(pattern.matcher(str).matches()){ //刚好是4位 return str; }else{ return str.substring(str.length()-4, str.length()); } } }catch (Exception e) { return ""; } }

结果:

----------结果-------
{收入=485,000.00, 余额=561,752.68, 银行=平安银行, type=收入, 尾号=9002}
----------结果-------
{支出=3,700.00, 余额=6,749.68, 银行=平安银行, type=支出, 尾号=9002}
----------结果-------
{收入=1,500, 银行=成都银行, type=收入, 尾号=2352}
----------结果-------
{支出=700, 银行=成都银行, type=支出, 尾号=2352}

posted on 2014-12-10 18:21  ccasdaaammm  阅读(2707)  评论(0编辑  收藏  举报