注释:收集各个银行的储蓄卡的存取操作接收到的短信内容信息;
招商银行: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}