在项目中如何去使用String、StringBuilder、StringBuffer?

如何把一个Json格式的数组转成String的字符串?

1. Json格式的devices数组

{
"startdate":"2018-07-01 00:00:12",
"enddate":"2018-07-02 00:00:00",
"devices":["150300000000101000,150300000000102000"]
}

2. 需要转成下面的格式并且再把这种格式转成下面的Json格式保存到JSONObject对象中,然后请求大数据接口

{
"starttime":"20180704000000",
"endtime":"20180706000900",
"devices":"150300000000101000,150300000000102000"
}

3. 保存到JSONObject中的格式

{
"starttime":"20180701000012",
"endtime":"20180702000000",
"devices":"150300000000101000,150300000000102000"
}

第一步:需要先从前台AJAX拿到请求的Json格式也就是1中所说的


第二步:然后使用StringBuilder来进行拼接成150300000000101000,150300000000102000 这样的字符串格式就需要遍历,然后判断是不是遍历结束


        //把卡口列表转成Json格式
        StringBuilder build = new StringBuilder();
        for (int i = 0; i < devicesStr.length; i++) {  
            if (i == devicesStr.length-1) {
                build.append(devicesStr[i]); 
            } else {
                build.append(devicesStr[i] + ",");  
            }
        }
        noPlateNumberCarForm.setDevicesId(build.toString());

第三步:再把转好的字符串put到JSONObject对象中,然后去请求大数据的接口,然后得到返回的结果进行判断

        // 实例化入参JSON
        JSONObject inJson = new JSONObject();
        // 实例化出参JSON
        JSONObject outJson = new JSONObject();
        inJson.put("starttime", starttime);
        inJson.put("endtime", enddatime);
        inJson.put("devices", noPlateNumberCarForm.getDevicesId());
        // 调接口查询车辆jobId信息
        try {
            String url = ConstantUtils.RETURN_SELECT_URL + "/techtactics/noplatenumbercar/start";
            String strOutJson = HttpUtils.doPost(url, inJson.toString());
            outJson = JSONObject.fromObject(strOutJson);
            // 转化为java使用的json字符串格式
            String result = "";
            if (outJson != null) {
                // 转化为java使用的json字符串格式
                result = outJson.get("result").toString();
            }
            //主车的结果判断
        if (ConstantUtils.RETURN_RESULT_IABC_OK.equals(result)) {
//              JSONObject jsonContext = new JSONObject();
                 Object jsonContext = outJson.get("context");
                String jobIdStr = jsonContext.toString();
                int jobId = Integer.parseInt(jobIdStr);
下面就是具体拿到jobId所做的业务逻辑判断什么的

总结:

1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);

(1)String是不可变的,一旦创建以后要么被GC回收,要么重新把值的地址重新赋给那个变量
如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

(2):在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的,而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

你可能感兴趣的:(【JAVA】)