对不起,如果问题已经被问到,我刚刚尝试了"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());
答案 0 :(得分:2)
您可以阅读以下异常消息begin 8, end 17, length 9
:
您从8(开始)到17(结束)要求substring
,但当前长度为9。
抛出:
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);
}