java - 为什么我会收到 java.lang.StringIndexOutOfBoundsException?

标签 java string

我想编写一个程序,逐步打印单词,直到出现完整的句子。例如:我需要编写(输入)和输出:

I
I need
I need to
I need to write.

这是我的代码:

public static void main(String[] args) {   
   String sentence = "I need to write.";
   int len = sentence.length();
   int numSpace=0;
   System.out.println(sentence);
   System.out.println(len);

   for(int k=0; k<len; k++){
      if(sentence.charAt(k)!='\t')
         continue;
      numSpace++;
   }

   System.out.println("Found "+numSpace +"\t in the string.");  

   int n=1;
   for (int m = 1; m <=3; m++) {      
      n=sentence.indexOf('\t',n-1);
      System.out.println("ligne"+m+sentence.substring(0, n));
   }
}

这就是我得到的:

I need to write.
16
Found 0 in the string.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: -1 at
java.lang.String.substring(String.java:1937) at
split1.Split1.main(Split1.java:36) Java Result: 1 BUILD SUCCESSFUL
(total time: 0 seconds)

我不明白为什么 numSpace 不计算空格的出现次数,也不明白为什么我没有得到正确的输出(即使我将 numSpace 替换为 3)。

最佳答案

  1. 您没有 \t 字符,因此 indexOf(..) 返回 -1
  2. 您尝试使用 0 到 -1 之间的子字符串 - 失败

解决方案是检查:

if (n > -1) {
    System.out.prinltn(...);
}

关于java - 为什么我会收到 java.lang.StringIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471769/

相关文章:

c - C中扫描和打印字符串的段错误

java - Web 应用程序中的依赖类出现 NoClassDefFoundError

java - JDK 中的加密提供者

java - 我无权访问代码中的图像(R.drawable ...)

c++ - 尝试将 static_cast<> const char[] 转换为 unsigned char * 时出错

R - 仅用一个替换多个出现的字符。正则表达式

c# - 如何使用 C# 对 IP 地址列表进行排序

java - swig从struct中的变量获取返回类型作为java中的字符串数组

java - 在内存中存储父子映射。有效地为 parent 列出所有可达的 child

java - GraphQL java 后端入门