我想知道如何将以下数据拆分成多个列表。这是我的输入(来自文本文件,此处重新创建的示例):
aaaa bbbb cccc,ccc,cccc
aaaa-- bbbb
aaaa bbbb cccc-
aaaa bbbb cccc,ccc
aaaa-
aaaa bbbb ccc,cccc,cccc
分隔文本的每个部分是一个空白区域。我需要创建的代码应该创建三个列表,由文本文件中每个条目的a,b和c组组成,每个条目相对于每一行,而忽略任何带有" - "的行。所以,我的3个数组应按如下方式填充:
Array1: aaaa, aaaa, aaaa
Array2: bbbb, bbbb, bbbb
Array3: (cccc,ccc,cccc),(cccc,ccc),(ccc,cccc,cccc)
添加了括号以显示第三个数组应包含所有列出的c值 a,b和c都包含从文本文件导入的字符串。到目前为止,这是我的代码:
import java.util.*;
import java.io.*;
public class SEED{
public static void main (String [] args){
try{
BufferedReader in = new BufferedReader(new FileReader("Curated.txt"));
String temp;
String dash = "-";
int x = 0;
List<String> list = new ArrayList<String>();
List<String> names = new ArrayList<String>();
List<String> syn = new ArrayList<String>();
List<String> id = new ArrayList<String>();
while((temp = in.readLine()) != null){
if(!(temp.contains(dash))){
list.add(temp);
if(temp.contains(" ")){
String [] temp2 = temp.split(" ");
names.add(temp2[0]);
syn.add(temp2[1]);
id.add(temp2[2]);
}else{
System.out.println(temp);
}//Close if
System.out.println(names.get(x));
System.out.println(syn.get(x));
System.out.println(id.get(x));
x++;
}//Close if
}//Close while
}catch (Exception e){
e.printStackTrace();
System.exit(99);
}//Close try
}//Close main
}//Close class
但我的输出始终是:没有。如何将这些值正确保存到3个独立的数组或数组列表?
答案 0 :(得分:1)
您正在引用 list.get(x),但您的 x ++ 和 list.add 将不会同步你读了一条没有破折号的线。所以(x)将不是正确的参考。
你为什么这样做:
String [] temp2 = list.get(x).split(" ");
而不是:
String [] temp2 = temp.split(" ");
修改强>
尝试:
if(!(temp.contains(dash))){
list.add(temp);
if(temp.contains(" ")){
String [] temp2 = temp.split(" ");
names.add(temp2[0]);
syn.add(temp2[1]);
id.add(temp2[2]);
}else{
System.out.println(temp);
}//Close if
}//Close if
for(int x = 0; x < names.size(); x++) {
System.out.println(names.get(x));
System.out.println(syn.get(x));
System.out.println(id.get(x));
}
答案 1 :(得分:0)
可能会抛出一个例外,而你却忽略了它。
将您的捕获更改为
}catch (Exception e){
e.printStackTrace();
System.exit(99);
}//Close try