2013-05-10 48 views
0

我有像在一个文件中的这些行:读取的文件,并把对某些阵列

101 xxx 3 yyy 
102 aaa 2 bbb 
103 ppp 3 qqq 
104 iii 5 jjj 

我想提出在阵列中的每一行的各元件,例如

int[] par1 = {101,102,103,104} 
String[] par2 = {"xxx", "aaa", "ppp", "iii"} 
int[] par3 = {3,2,3,5} 
String[] par4 = {"yyy", "bbb", "qqq", "jjj"} 
+0

你的阵列表示列不行还是我误解了? – Sirko 2013-05-10 12:56:11

+0

你忘了粘贴你的密码。 。 ..?? – Kent 2013-05-10 12:56:28

+0

@Sirko是的,你是对的 – Ehsan 2013-05-10 12:58:41

回答

2

读线与番石榴/ Apache的百科全书等:

结果:

List<String> lines; 

下一页(使用lines):

List<Integer> par1 = new ArrayList(); 
List<String> par2 = new ArrayList(); 
List<Integer> par3 = new ArrayList(); 
List<String> par4 = new ArrayList(); 

try { 
    for(String line : lines) { 
     String[] elements = line.split(" "); 
     if(elements.length == 4) { 
      par1.add(Integer.valueOf(element[0])); 
      par2.add(element[1])); 
      par3.add(Integer.valueOf(element[2])); 
      par4.add(element[3])); 
     } 
     else { 
      throw new Exception("Conversion failed"); 
     } 
    } 
} 
catch(NumberFormatException ex) { 
    throw new Exception("Conversion failed"); 
} 

// Convert ArrayList to Array if you need to. 
+0

将所有行读入'List',真的吗?这完全没有(空间)效率。 – Dukeling 2013-05-10 13:06:55

+0

谢谢,请确保我搜索了一个小时。 – Ehsan 2013-05-10 13:07:00

+0

@Dukeling:这可能是最简单的方法,通过迭代来完成这一点。如果你有更好的解决方案,请分享:) – Aquillo 2013-05-10 13:09:22

1

像这样的东西应该工作(没有测试)

List<String> lines = Files.readAllLines(Paths.get("1.txt"), StandardCharsets.UTF_8); 
    int[] par1 = new int[lines.size()]; 
    String[] par2 = new String[lines.size()]; 
    int[] par3 = new int[lines.size()]; 
    String[] par4 = new String[lines.size()]; 
    for(int i = 0; i < lines.size(); i++) { 
     String[] a = lines.get(i).split(" +"); 
     par1[i] = Integer.parseInt(a[0]); 
     par2[i] = a[1]; 
     par3[i] = Integer.parseInt(a[2]); 
     par4[i] = a[4]; 
    }