今天在编写代码时,截取字符串时报错。
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;
}
以上是总结方法,作为笔记,以此记录。
如果还有更好的解决方法,还请各位大佬动手留言。
本文记录了在Java编程时遇到的字符串截取错误,即ArrayIndexOutOfBoundsException,以及解决这个问题的方法。通过先检查截取的子字符串数组长度,避免直接访问不存在的数组元素,可以有效防止此类异常。示例代码展示了使用集合和数组两种方式检查长度,并给出正确的运行结果。此外,文章还解析了`Arrays.asList()`方法的源码,加深理解。
24万+

被折叠的 条评论
为什么被折叠?



