获取字符串中的数字(位数可以不一样)以及获取json格式的tagArray中的每一个tagId值

需求

给定{"id":"52"},{"id":"8"},需要将里面的52,8提取出来,放到数组里备用。

注意

  • 52是一个两位数,不应该被识别成5和2
  • 该字符串有很强的模式性,数字前面都是{"id":",数字后面都是"}
  • 更普遍的方式是采用正则表达式

代码

 //     转义后等价于   {"id":"52"},{"id":"8"}
        String string="{\"id\":\"52\"},{\"id\":\"8\"}";
        int num[]=new int[6],//大小够 数据库标签总个数,或者 单个文章的最多标签数就行
                i=0;
         //判断是否有 含数字的结构
        while(string.contains( "{\"id\":\"" ) )
        {
//辅助理解
            System.out.println("字符串为:"+string);
            System.out.println("{\"id\":\"起始位置:"+string.indexOf("\"id\":\""));
            System.out.println("\"}起始位置:"+string.indexOf("\"}"));
//            有数字子串(7是转义后的字符串 {"id":" 的长度)
            String subString=(string.substring( string.indexOf("{\"id\":\"")+7,string.indexOf("\"}")));
           num[i]=Integer.parseInt(subString);
            System.out.println("数字"+num[i]);
            i++;
//            输出玩该数字后,删除掉该结构{"id":"5"}  变为 ,{"id":"8"}
//            因为 "}长为2,要删除到  "}的}位置
            string=string.replace(string.substring( string.indexOf("{\"id\":"),string.indexOf("\"}")+2),"");
        }

应用:

获取js传来的json格式的param里 tagArray中的每一个tagId值。关键代码如下:

add_article.js

封装前台页面的数据,提交到后台处理

// 标签(可多选)
    var tagId = $(".chosen-select").val();
    // alert(tagId);
    if(!isEmpty(tagId)){
        //即先变字符串,然后分割成  {"id":"5"}   {"id":"6"}
    	var ids = (tagId+"").split("\,");
    	var tagArray = [];
    	for(var i=0;i<ids.length;i++){
    		tagObj = {"id":ids[i]};//好像必须得这种格式
    		// Alert(tagObj.id);
    		tagArray.push(tagObj);
    	}
    	param["tagArray"] = tagArray;
    	console.info(tagArray);
    }else{
    	autoCloseAlert("请输入标签",500);
    	return false;
    }
    // alert('param='+encodeURI(encodeURI(JSON.stringify(param))));
    // 保存文章
    $.ajax({
        type : "POST",
        url : '../article/addContent',
        //encodeURI()相当于对前端传输的数据以某种方式进行加密
        data : 'param='+encodeURI(encodeURI(JSON.stringify(param)))+"&content="+encodeURI(encodeURI(content)).replace(/\&/g, "%26").replace(/\+/g, "%2B")+"&description="+encodeURI(encodeURI(description)),
        success  : function(data) {  //sucess表示传递到后台给我返回的数据(json)
        	if(data.resultCode != 'success'){ //状态码
        		autoCloseAlert(data.errorInfo,1000);
				return false;
			}else{
                //即http://localhost:8080/article/addContent 到了 http://localhost:8080
                window.location.href = "../../../";
			}
		}
    });

ArticleController.java

调用方法,完成处理逻辑

  String paramDecode = URLDecoder.decode(param, "utf-8");
  Article articleDecode = JsonUtil.fromJson(paramDecode, Article.class);
 int[] num=articleDecode.stringToNum(articleDecode.getTagArray());

Article.class

定义具体的属性和实现方法

private  List<Map<String,String>> tagArray;//添加文章时 暂存 article/add_article.js里 返回的的json形式的tagId
//param会有多个对象(所以List),每一个都可认为是key-value形式(所以Map<String,String>)
// 可以发现只有定义成List<Map<String,String>>   ArticleController里的JsonUtil.fromJson(paramDecode, Article.class);才不会报错且能拿到数值

    public String tagArrayToString( List<Map<String,String>> tagArray) {
        return "" + tagArray; //加“” 变字符串
    }

    public int[] stringToNum(List<Map<String,String>> tagArray){
        String string=tagArrayToString(tagArray);
        //     转义后等价于   [{id=5}, {id=6}]
        int num[]=new int[5],//大小够 数据库标签总个数,或者 单个文章的最多标签数就行
                size=0;//有效数字个数
        //判断是否有 含数字的结构
        while(string.contains( "{id=" ) )
        {
//辅助理解
//            System.out.println("字符串为:"+string);
//            System.out.println("{id=起始位置:"+string.indexOf("{id="));
//            System.out.println("}起始位置:"+string.indexOf("}"));
//            有数字子串(7是转义后的字符串 {"id":" 的长度)
            String subString=(string.substring( string.indexOf("{id=")+4,string.indexOf("}")));
            num[size]=Integer.parseInt(subString);
//            System.out.println("数字:"+num[size]);
            size++;
//            输出玩该数字后,删除掉该结构{"id":"5"}  变为 ,{"id":"8"}
//            因为 "}长为2,要删除到  "}的}位置
            string=string.replace(string.substring( string.indexOf("{id="),string.indexOf("}")+1),"");
        }
        num = Arrays.copyOf(num, size);//缩容,只留有效数字个元素
          return  num;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值