我有赛车手课:
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”中。
您正在获取字符串的'_'+1
的索引,该索引的计算结果为96
的int大于您的实际字符串长度。更改此行
line.substring(line.indexOf('_' + 1), line.lastIndexOf('_'));
到
line.substring(line.indexOf('_') +1, line.lastIndexOf('_'));
获取第一个下划线和最后一个下划线之间的字符串
老实说,我建议您在这里只使用String#split
,让您的生活更轻松:
private Racer createRacer(String line) {
return new Racer(line.split("_")[1], line.split("_")[2]);
}
当前问题的原因是您没有正确使用substring
。但是,我会完全避免使用它,而是使用split
。