线程“ main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:在java.lang.String.substring(String.java:1960)处为-1

问题描述 投票:0回答:2

我有赛车手课:

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 + '\'' +
            '}';
}}

然后,我试图在另一个类中创建该类的赛车手:

public class RacerList {
public void createListOfRacers() {
Racer Kevin = createRacer("KMH_Kevin Magnussen_HAAS FERRARI");
}

以及帮助创建赛车手的此类方法:

 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”中。

java
2个回答
1
投票

您正在获取字符串的'_'+1的索引,该索引的计算结果为96的int大于您的实际字符串长度。更改此行

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

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

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


0
投票

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

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

当前问题的原因是您没有正确使用substring。但是,我会完全避免使用它,而是使用split

© www.soinside.com 2019 - 2024. All rights reserved.