【问题标题】:java substring and charAt returns "" and exception respectivly while readng the last characterjava substring 和 charAt 在读取最后一个字符时分别返回“”和异常
【发布时间】:2013-04-30 04:23:19
【问题描述】:
public class StringDemo{

   public static void main(String[] args) {

       String str = "this:";
       int a = str.indexOf(":"); // returns 4
       String subStr = str.substring(a+1); // returns "" <empty string>
       String subStr = str.substring(a+2); // throws exception
      int charAt = str.charAt(a+1); // Throws an StringIndexOutOfBoundsExp.
    }
}

谁能解释为什么它返回 "" 以及为什么它会抛出异常

【问题讨论】:

标签: java string char substring


【解决方案1】:

我想先回答为什么结果是空字符串。

方法:substring(int beginIndex)

就像说

substring(beginIndex,String.length());

参数中指定的 endIndex 为 5,长度也是 5。因此,如果您执行 substring(0,0) 或 substring(1,1) 或 substring(5,5),它将始终给出一个空字符串因为开始和结束索引是相等的。用简单的语言来说,相同的开始和结束索引不占用任何内容,因此导致空字符串。

为什么整数 5 仍然是有效索引?答案在于 Java API 本身:抛出: IndexOutOfBoundsException - 如果 beginIndex 为负数或大于此 String 对象的长度。

参考:

Java API
String substring() method example

【讨论】:

    【解决方案2】:

    不,它不会抛出IndexOutOfBoundException,而是会返回空字符串。 在第二种方法的情况下,beginIndexendIndex 相等时也是如此。它只会在beginIndex 为负数、大于endIndex 或大于length of String 时抛出StringIndexBoundException

    String subStr = str.substring(a+1); // 返回 "" 。 // 因为那个地方什么都没有

    显然是there in the API

    "emptiness".substring(9) 返回 ""(一个空字符串)

    阅读更多:http://javarevisited.blogspot.com/2011/10/how-substring-in-java-works.html#ixzz2SVu5lyYo

    CharAt 抛出的地方 抛出: IndexOutOfBoundsException - 如果索引参数为负数或不小于length of this string

    【讨论】:

      【解决方案3】:
      str.substring(a+1)
      

      返回给定索引(a+1)之后的字符串,即冒号后面的字符串,为空字符串。

      str.charAt(a+1)
      

      访问不存在的冒号之后位置的数组值。

      【讨论】:

        【解决方案4】:

        str.substring(a+1)str 返回一个子字符串,从a+15 开始。您的字符串在索引 5 处没有任何内容,因此它将返回一个空字符串。

        【讨论】:

        • 好的,同意你的回答,但是当我尝试访问一个 +2 位置时,这在子字符串方法中给了我一个异常,所以字符串在第 6 个索引处没有任何内容,所以它为什么会抛出异常
        • .substring() 会在你用字符串的大小调用它时返回一个空字符串,它只会返回一个新的空字符串。任何更大的东西都会抛出异常。
        猜你喜欢
        • 1970-01-01
        • 2013-09-30
        • 1970-01-01
        • 2021-10-22
        • 2017-05-08
        • 2018-05-18
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多