Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1位于java.lang.String.substring(String.java:1960)_Java - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1位于java.lang.String.substring(String.java:1960)

“线程中的异常”;“主要”;java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1位于java.lang.String.substring(String.java:1960),java,Java,我的职业是赛车手: public class Racer { private String name; private String team; private String result; public Racer(String name, String team) { this.name = name; this.team = team; } @Override public String toString() { return "Racer{" +

我的职业是赛车手:

public class Racer {

private String name;
private String team;
private String result;


public Racer(String name, String team) {
    this.name = name;
    this.team = team;
}

@Override
public String toString() {
    return "Racer{" +
            "name='" + name + '\'' +
            ", team='" + team + '\'' +
            ", result='" + result + '\'' +
            '}';
}}
然后,我尝试在另一个类中创建该类的racer:

public class RacerList {
public void createListOfRacers() {
Racer Kevin = createRacer("KMH_Kevin Magnussen_HAAS FERRARI");
}
这些方法有助于创建racer:

 private Racer createRacer(String line) {
    return new Racer(extractNameOfTheRacer(line), extractTeamOfTheRacer(line));
}

private String extractNameOfTheRacer(String line) {
    return line.substring(line.indexOf('_' + 1), line.lastIndexOf('_'));
}

private String extractTeamOfTheRacer(String line) {
    return line.substring(line.lastIndexOf('_' + 1));
}
}

我在此处收到指示错误:

return line.substring(line.indexOf('_' + 1), line.lastIndexOf('_'));

在“extractNameOfRacer”方法中

老实说,我建议您在这里使用
String#split
,让您的生活更轻松:

private Racer createRacer(String line) {
    return new Racer(line.split("_")[1], line.split("_")[2]);
}

当前问题的原因是未正确使用
子字符串。但是,我会完全避免它,而是使用
split

您将得到字符串的
'+1
索引,它的计算结果是
96
为int,大于您的实际字符串长度。换行

line.substring(line.indexOf('_' + 1), line.lastIndexOf('_'));


要获取第一个下划线和最后一个下划线之间的字符串

给定输入
KMH\u Kevin Magnussen\u HAAS FERRARI
,名称和团队名称是什么?Kevin Magnussen-姓名,HAAS FERRARI-团队
line.substring(line.indexOf('_') +1, line.lastIndexOf('_'));