解析包含不同数目字符串的行



我有一个文本文件,格式如下(每行的单词用制表符分隔):

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()));
});

我希望我能帮到你。

相关内容

最新更新