• Python工程师Java之路(h)Java字符串拼接+null拼接处理


    Java版本:1.8

    加号

    String a = "ab" + 'c' + 5L;
    System.out.println(a);
    //abc5
    
    String b = 9.99F + "ABC" + null;
    System.out.println(b);
    //9.99ABCnull
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    String的concat

    System.out.println("aa".concat("bb"));
    //aabb
    
    • 1
    • 2

    StringBuilder和StringBuffer的append

    StringBuilder stringBuilder = new StringBuilder("ab");
    stringBuilder.append(99L).append("cd");
    System.out.println(stringBuilder);
    //ab99cd
    
    StringBuffer stringBuffer = new StringBuffer("ab");
    stringBuffer.append(9.99F).append("cd");
    System.out.println(stringBuffer);
    //ab9.99cd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    StringBuffer是线程安全的(synchronized),源码截取如下

        @Override
        synchronized StringBuffer append(AbstractStringBuilder asb) {
            toStringCache = null;
            super.append(asb);
            return this;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    StringBuilder的append不是线程安全的,速度更快,源码截取如下

        public StringBuilder append(StringBuffer sb) {
            super.append(sb);
            return this;
        }
    
    • 1
    • 2
    • 3
    • 4

    String的join

    String a = String.join("-", "a", "b", "c");
    System.out.println(a);
    //a-b-c
    
    String[] strings = {"a", "b", "c", null, "e"};
    String b = String.join("-", strings);
    System.out.println(b);
    //a-b-c-null-e
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    源码截取如下,第一个参数为分隔符

        public static String join(CharSequence delimiter, CharSequence... elements) {
            Objects.requireNonNull(delimiter);
            Objects.requireNonNull(elements);
            // Number of elements not likely worth Arrays.stream overhead.
            StringJoiner joiner = new StringJoiner(delimiter);
            for (CharSequence cs: elements) {
                joiner.add(cs);
            }
            return joiner.toString();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    StringJoiner

    StringJoiner实例化时,可设置(分隔符,前缀,后缀)

    import java.util.StringJoiner;
    
    public class Hi {
        public static void main(String[] args) {
            //StringJoiner(分隔符, 前缀, 后缀)
            StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
            //遍历
            String[] strings = {"a", "b", "c", null, "e"};
            for (String string : strings) {
                //过滤空值
                if (string != null) {
                    stringJoiner.add(string);
                }
            }
            //打印
            System.out.println(stringJoiner.toString());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    打印效果
    [a,b,c,e]

    StringUtils.join

    import com.sun.deploy.util.StringUtils;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Objects;
    
    public class Hi {
        public static void main(String[] args) {
            ArrayList<String> a = new ArrayList<>(Arrays.asList("a", "b", null, "d"));
            //不过滤空值
            System.out.println(StringUtils.join(a, ",")); //a,b,null,d
            //过滤空值
            a.removeIf(Objects::isNull);
            System.out.println(StringUtils.join(a, ",")); //a,b,d
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    场景:拼接SQL

    Phoenix(待完善)

    import com.alibaba.fastjson.JSONObject;
    import com.sun.deploy.util.StringUtils;
    
    public class Hello {
        public static void main(String[] args) {
            String s = "{\"tb\":\"sku\",\"data\":{\"id\":\"99\",\"name\":\"椰子\"}}";
            JSONObject js = JSONObject.parseObject(s);
            String table = js.getString("tb");
            JSONObject data = js.getJSONObject("data");
            String sql = "upsert into " + table
                    + " (" + String.join(",", data.keySet()) + ") "
                    + "values"
                    + " ('" + StringUtils.join(data.values(), "','") + "');";
            System.out.println(sql);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    打印结果

    upsert into sku (name,id) values ('椰子','99');
    
    • 1

    MySQL(待完善)

    import com.alibaba.fastjson.JSONObject;
    
    import java.util.StringJoiner;
    
    public class Hi {
        public static void main(String[] args) {
            String s = "{\"tb\":\"sku\",\"data\":{\"id\":99,\"name\":\"椰子\"}}";
            JSONObject js = JSONObject.parseObject(s);
            String table = js.getString("tb");
            JSONObject data = js.getJSONObject("data");
            StringJoiner columns = new StringJoiner(",", "(", ")");
            StringJoiner values = new StringJoiner(",", "(", ")");
            for (String column : data.keySet()) {
                columns.add(column);
                Object value = data.get(column);
                if (value.getClass() == String.class) {
                    values.add("'" + value + "'");
                } else {
                    values.add(value.toString());
                }
            }
            System.out.println("INSERT " + table + columns + " VALUES " + values + ";");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    打印结果

    INSERT sku(name,id) VALUES ('椰子',99);
    
    • 1
  • 相关阅读:
    【微服务】spring 控制bean加载顺序使用详解
    wy的leetcode刷题记录_Day30_二叉树起点!
    Web前端开发PDF:技术与挑战的深度剖析
    Greetings(状压DP,枚举子集转移)
    Intellij IDEA--Undo Commit,Revert Commit,Drop Commit的区别
    计算机网络技术习题
    亚马逊、Lazada、Shopee、速卖通、阿里国际、美客多、eBay、沃尔玛测评自养号,产品权重该如何提高?
    Spring Task简单说明
    民安智库(第三方市场调查公司)北京汽车神秘顾客调查
    Linux 软件安装目录
  • 原文地址:https://blog.csdn.net/Yellow_python/article/details/128015983