StringIndexOutOfBoundsException抛出

时间:2018-04-16 10:19:20

标签: java indexing parameters substring

对不起,如果问题已经被问到,我刚刚尝试了"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 个答案:

答案 0 :(得分:2)

您可以阅读以下异常消息begin 8, end 17, length 9

您从8(开始)到17(结束)要求substring,但当前长度为9。

来自String.substring

  

抛出:

     

IndexOutOfBoundsException - 如果beginIndex为负数,或 endIndex大于此String对象的长度,或者beginIndex大于endIndex。

您需要检查String的长度以防止此异常。类似的东西:

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);
}
相关问题