注釋:收集各個銀行的儲蓄卡的存取操作接收到的短信內容信息;招商銀行: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元?!竟ど蹄y行】支出你尾號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號蜀源大廈?!久裆y行】農業銀行: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}
新聞熱點
疑難解答