3. 分割逗号避免数组越界

业务场景:上游3个参数(可能为空),服务只用一个参数接入,调用下游接口又要3个参数独立使用。最开始的一版代码遇到数组越界问题

Demo03

@Slf4j
public class Demo03 {

    public static String[] commaSplit(String commaStringCode) {
        String[] strings = new String[3]; // 原bug写法:new String[]{},报数组越界,后写死数组长度为3
        if (commaStringCode != null) {
            String[] splits = commaStringCode.split(",");
            for (int i = 0; i < splits.length; i++) {
                strings[i] = splits[i];
            }
        }
        return strings;
    }

    public static String[] commaSplit2(String commaStringCode) {
        ArrayList<String> stringList = new ArrayList<>();
        if (commaStringCode != null) {
            String[] splits = commaStringCode.split(",");
            Arrays.stream(splits).forEach(stringList::add);
        }
        String[] strings = stringList.toArray(new String[3]); // 原bug写法写new String[stringList.size()],报数组越界,后写死为3
        return strings;
    }

    public static void main(String[] args) {
        String aString = ",1,2";
        String bString = "0,,2";
        String cString = "0,1,";
        String dString = ",,2";
        String eString = ",1,";
        String fString = "0,,";
        String gString = ",,";
        String hString = "";

        test(aString);
        test(bString);
        test(cString);
        test(dString);
        test(eString);
        test(fString);
        test(gString);
        test(hString);
        test(null);
    }

    public static void test(String str) {
        String[] strings1 = commaSplit(str);
        String[] strings2 = commaSplit2(str);
        try {
            log.info("origin str:" + str + "--first split method:" + strings1[0] + "|" + strings1[1] + "|" + strings1[2]);
            log.info("origin str:" + str + "--second split method:" + strings2[0] + "|" + strings2[1] + "|" + strings2[2]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

控制台日志:

17:58:49.289 [main] INFO com.maplefire.demo.Demo03 - origin str:,1,2--first split method:|1|2
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:,1,2--second split method:|1|2
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:0,,2--first split method:0||2
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:0,,2--second split method:0||2
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:0,1,--first split method:0|1|null
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:0,1,--second split method:0|1|null
17:58:49.291 [main] INFO com.maplefire.demo.Demo03 - origin str:,,2--first split method:||2
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:,,2--second split method:||2
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:,1,--first split method:|1|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:,1,--second split method:|1|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:0,,--first split method:0|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:0,,--second split method:0|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:,,--first split method:null|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:,,--second split method:null|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:--first split method:|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:--second split method:|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:null--first split method:null|null|null
17:58:49.292 [main] INFO com.maplefire.demo.Demo03 - origin str:null--second split method:null|null|null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值