今天在编写代码时,截取字符串时报错。
String ss = "xx_yy";
if (StringUtils.isNotBlank(ss.split("_")[2]){
System.out.println(1);
} else {
System.out.println(2);
}
运行结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
经过搜索各路大神的解决方法,终于发现了一种解决方法:将截取后的字符串放入 数组或集合,然后再根据 数组或集合的长度,来进行判断被截取字符串是否存在。
集合篇:
String ss = "xx_yy";
List<String> list = Arrays.asList(ss.split("_"));
if (list > 2){
if (StringUtils.isNotBlank(ss.split("_")[2]){
System.out.println(1);
} else {
System.out.println(2);
}
} else {
System.out.println(3);
}
运行结果:
3
数组篇:
String ss = "xx_yy";
String[] s = ss.split("_");
if (s.length > 2){
if (StringUtils.isNotBlank(s[2]){
System.out.println(1);
} else {
System.out.println(2);
}
} else {
System.out.println(3);
}
运行结果:
3
其中集合篇的方法也是利用数组转换成集合再进行判断的:
集合篇Arrays.asList()方法源码:
public staic <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
private static class ArrayList<E> extends ... {
...
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
...
}
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
以上是总结方法,作为笔记,以此记录。
如果还有更好的解决方法,还请各位大佬动手留言。