将.txt文件中的字符串失败到String插入数组中

时间:2015-05-09 06:30:49

标签: java foreach java.util.scanner

这应该很容易。当我编码这个时,我就100%确定它会起作用。我想创建一个2维数组的字符串(data [] [])包含data.txt的数据,还有一个1维数组(kolom [])包含列描述,它是data.txt的第一行。

import java.util.*;
import java.io.*;
public class Data {
private String[][] data;
private String[] kolom;
    public Data() throws FileNotFoundException {
        data = new String[300][4];
        kolom = new String[4];
        Scanner readLine = new Scanner(new File("data.txt"));
        Scanner readText = new Scanner(readLine.nextLine()).useDelimiter(";");

        for(String element : kolom) 
            element = readText.next();

        for(String[] row : data) {
            readText = new Scanner(readLine.nextLine()).useDelimiter(";");
            for(String element : row){
                element = readText.next();
            }
        }
    }
    public String[] getKolom() {
        return kolom;
    }
    public String[][] getData() {
        return data;
    }
    public static void main (String[] args) throws FileNotFoundException  {
        Data data = new Data();
        for(String element : data.getKolom()) 
            System.out.print(element);
        for(String[] row : data.getData()) 
            for(String element : row)
                System.out.print(element);
    }
}

此程序输出所有空值。这意味着Strings没有插入阵列。 造成这个问题的原因是什么?

    下面是
  • data.txt片段(301行的几行)。
  • data.txt与Data.class文件位于同一文件夹中。
  • 尝试将增强循环更改为正常循环仍然是同样的失败。
  • 这个扫描仪实现有问题吗?

data.txt中

Nama;Tanggal;Email;Negara
Kamal;16/04/15;consectetuer.adipiscing@volutpatornarefacilisis.org;Cook Islands
Melodie;15/12/23;Donec@malesuada.co.uk;Gibraltar
Salvador;15/07/01;purus@bibendum.edu;Lesotho
Garth;14/02/02;pede.Nunc.sed@faucibusid.org;Namibia

ps:' kolom'是我的母语

的列#39;

2 个答案:

答案 0 :(得分:2)

你误解了每个循环

此处和下一个循环

for(String element : kolom) 
            element = readText.next();

element确实具有kolom[1],kolom[0] etc的相同内存位置,因此如果更改element的值,则不表示您在特定索引处更改数组。因此,数组未初始化为您提供空。

相反,您可以使用while循环

while(readText.hasNext()){

   kolom[i++]=scanner.nextLine();  //and so on for other array
}

答案 1 :(得分:1)

看看这个:

import java.util.*;
import java.io.*;
public class Data {
private String[][] data;
private String[] kolom;
    public Data() throws FileNotFoundException {
        data = new String[300][4];  
        kolom = new String[4];

        Scanner readLine = new Scanner(new File("E:/Data.txt"));
        Scanner readText = new Scanner(readLine.nextLine()).useDelimiter(";");

        int lineNumber = 0;
        while(readLine.hasNextLine()){
            String line = readLine.nextLine();
            kolom=line.split(";");   // filling data to kolom array
            data[lineNumber]=kolom;   // filling data to data array
            lineNumber++;
        }    


    }
    public String[] getKolom() {
        return kolom;
    }
    public String[][] getData() {
        return data;
    }
    public static void main (String[] args) throws FileNotFoundException  {
        Data data = new Data();
        for(String element : data.getKolom()) 
            System.out.print(" "+element);

        System.out.println("\n*******data*********");
        for(String[] row : data.getData()) {
            for(String element : row)
                System.out.print(" "+element);
            System.out.println();
        }
    }
}

您的代码存在问题,因为您未填写kolomdata

中的数据