业务场景:上游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