【问题标题】:String returning StringIndexOutOfBoundException返回 StringIndexOutOfBoundException 的字符串
【发布时间】:2020-07-03 10:56:24
【问题描述】:

我有两个字符串

String s1 = "";
String s2 = "";
Boolean check = s1 != null && s2 != null && s1.substring(1) != null;
 then return check;

为什么这段代码会抛出 StringIndexOutOfBoundException? 如果 s1 ="" 那么为什么在 s1 != null 为 false 时检查 s1.substring(1) != null ?它应该返回false而不是抛出异常? 如何解决?

【问题讨论】:

标签: java string substring


【解决方案1】:

空字符串与空字符串不同。在 Java 中,String 类拥有一个检查 String 是否为空的方法。将空支票改写为!s1.isEmpty() && !s2.isEmpty()

同样,子字符串也不返回 null。如果索引是字符串的长度,它可以返回一个空字符串,否则会为无效索引抛出异常。也许您打算在最后一个条件下检查s1.substring(1).isEmpty()?这么说,据我所知,这相当于检查s1.length() > 1,这更清楚一点。

【讨论】:

    【解决方案2】:

    您可以使用以下两个函数进行空字符串检查。

                    StringUtils.isEmpty(str)
                    StringUtils.isBlank(str)
    

    【讨论】:

    • 如果我没记错的话,isBlank() 函数中包含了一个空检查。
    • 是的 null 检查包含在 isBlank 函数中
    【解决方案3】:

    程序返回错误,因为布尔值的前 2 个条件为真,"" 和 null 不一样,所以程序不断检查所有条件,但可能子字符串返回错误,因为您不能子字符串长度为 0 的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2016-08-27
      • 2019-03-22
      • 2020-08-07
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多