当前位置: 首页 > 知识库问答 >
问题:

已引发StringIndexOutOfBoundsException[重复]

嵇浩然
2023-03-14

很抱歉,如果问题已经被问到了,我只是得到一个“java.lang.StringIndexOutOfBoundsException”抛出,尽管我的程序在第一次尝试时运行正常。我尝试更改子字符串的索引,但也不起作用。以下是抛出的完整异常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 8, end 17, length 9
at java.base/java.lang.String.checkBoundsBeginEnd(Unknown Source)
at java.base/java.lang.String.substring(Unknown Source)
at platerecognition.PlateRecognition.main(PlateRecognition.java:31)

下面是台词:

public class Asserv {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws FileNotFoundException {

   final File folder = new File("./Verr");

   PrintWriter pw = new PrintWriter(new File("Gel.csv"));

   for (final File fileEntry : folder.listFiles()) {
    if (!fileEntry.isDirectory()) { 
        String filename = fileEntry.getName();
        String date = filename.substring(0, 8);
        System.out.println(date);
        String time = filename.substring(8,17);
        System.out.println(time);
        int index = filename.indexOf("_", 19);
        String plate = filename.substring(18,index);
        System.out.println(plate);        
        int index2 = filename.indexOf("-", index+2);
        String cam = filename.substring(index+4, index2);
        System.out.println(cam);
        String last = filename.substring(index2 + 1, filename.indexOf('.', index2 + 1));
        System.out.println(last);
        System.out.println(fileEntry.getName());

共有1个答案

印瑾瑜
2023-03-14

您可以读取异常消息begin8,end17,length 9,如下所示:

您要求从8(开始)到17(结束)的子字符串但当前长度是9。

string.substring

投掷:

IndexOutOfBoundsException-如果beginIndex为负值,或者endIndex大于此字符串对象的长度,或者beginIndex大于endIndex。

您需要检查字符串的长度以防止此异常。类似于:

int begin = 8;
int end = 17;
s.substring(begin, Math.min(s.length(), end));

我使用math.min(s.length(),end)获得最低值,它将是end或此string的极限。

注意:如果begin大于end(或长度),则会出现同样的问题。所以这不是完全安全的,但你明白了。

这里有一个快速的方法

public static String substring(String s, int begin, int end){
    //Prevent out of bounds by stopping at the end of the `String`
    end = Math.min(end, s.length());

    return s.substring(begin, end);
}
 类似资料:
  • 首先,这里是我的代码中有问题的部分;这些都是非常基本的类 TestClass: 所以,我认为问题出在客舱。这是我第一次在class things(我指的是if(checkPw(password)==true)部分)中使用该类。在测试类中,它看起来非常清楚而且我从来没有想过会出现这个错误。我该如何避免这条信息呢? 完全错误: Java结果:1

  • 我正在编写一个打开文本文件并检查注释的程序。然后它解析注释以检查某些单词。 im出现的错误是以下while循环检查当前行是否以空白或“/”以外的任何字符开头(如果存在非反斜杠字符),然后while循环移到下一行并再次检查。一旦while循环满足其要求并爆发,程序就会崩溃,我会得到以下输出错误。 下面是有问题的代码示例 谢谢你的帮助。我肯定这是一个简单的错误,但我就是没看到。

  • 我将把字母表与您输入的字符串进行比较 当输入字符串与字母字符串匹配时,我将按照以下步骤进行操作 我不明白为什么会发生StringIndexOutOfBoundsException 问题出在哪里?

  • 问题内容: 在使方法在Java中正常工作时,我遇到了一些问题。在程序中,我创建了一个由许多不同长度的不同单词组成的数组。我正在使用的方法应该读取用户输入的字长,字母和位置,然后Java将打印出与这三个参数匹配的所有字(例如,如果用户键入了字长4,字母A和位置2,并打印出长度为4且在位置2包含字母A的单词)。 无论如何,我创建的方法如下所示: 对于某些输入,此方法很好用,但是对于其他输入,我会收到如

  • 问题内容: 我正在编写一个打开文本文件并检查注释的程序。然后,它解析注释以检查某些单词。 错误im出现在以下while循环中,该循环检查是否当前行以空格或除’/’以外的其他字符开头,如果那里存在非反斜杠字符,则while循环移至下一行并检查再次。一旦while循环满足其要求并中断程序崩溃,我将收到以下输出错误。 这是有问题的代码示例 谢谢你的帮助。我确定这是一个简单的错误,但我只是看不到它。 问题

  • 我试图等到元素出现后再继续,但是对于我当前使用的方法,它的抛出元素不存在,甚至在超时结束之前。 示例用法: 然后它应该等待30秒或直到元素存在,但它会立即抛出元素未找到异常...