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

招商银行: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}