“线程中的异常”;“主要”;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('_'));