我有一个文本文件,格式如下(每行的单词用制表符分隔):
stri1 stri2 stri3
stri4 stri5 stri6
stri7 stri8
stri9 stri0 stri5
正如你所看到的,我有一些只有两个单词的行。我有一个类来保存每行的单词:
public class Entity{
private word1,word2,word3;
//constructor and getter/setter methods
}
我想用下面的代码保存文本值:
for(String i : filelines){
String[] line = i.split("t");
if(line[2] == null){
listOfEntities.add(new Entity(line[0], line[1], null));
}
else{
listOfEntities.add(new Entity(line[0], line[1], line[2]));
}
当我尝试执行这段代码时,我得到一个ArrayIndexOutOfBoundsException,因为有些行只有2个单词。我该如何处理这种情况,因为我也想要空值,以便以后进行一些sql查询。
数组长度的Mod将返回0,如果数组超过长度,它将存储第0个索引,而不是您必须执行多个if,就像您为第二个索引所做的那样。另一种方法,我建议在实体参数中传递整个数组,并在实体类中运行for循环,直到数组长度,这将运行到数组中的可用行。
for(String i : filelines){
String[] line = i.split("t");
if(line[2 % line.length] == null){
listOfEntities.add(new Entity(line[0], line[1 % line.length], null));
}
else{
listOfEntities.add(new Entity(line[0], line[1 % line.length], line[2 % line.length]));
}
我给你另一个选择。必须用元素分隔文件中的选项。它看起来像这样:
- stri1-stri2-stri3
- stri4-stri5-stri6
- stri7-stri8
- stri9-stri0-stri5
你需要稍微改变一下你的实体类:
public static class Entity {
private String[] words;
public Entity(String[] words) {
this.words = words;
}
public String[] getWords() {
return words;
}
}
现在把整个事情读出来,我给你写了一个代码。
List<Entity> array = new ArrayList<>();
Scanner scanner = new Scanner(new File("MyFile.txt"));
while (scanner.hasNext()) {
String line = scanner.next();
String[] options = line.split("-");
array.add(new Entity(options));
}
array.forEach(entity -> {
System.out.println("Entity Words > " + Arrays.toString(entity.getWords()));
});
我希望我能帮到你。