【问题标题】:split a text file into arrays将文本文件拆分为数组
【发布时间】:2016-04-04 22:18:14
【问题描述】:

我有一个这种形式的文本文件:

ID
FName
LName
City
Age
;
22333;Giannis;Georgakopoulos;Patisiwn, Athens;42
22222;Maria;Nikolakopoulou;Kabalas 33, Aigaleo;34
84567;Konstantinos;Santorinaios;Karaiskaki 44, Patisia;29 

我想阅读文本并将第一个元素 (ID,FName,LName,City,Age) 直到 ; 放入一个数组中。在此之后,我想将其余部分放入另一个中。 最后,我想以如下形式将它们放入一个数组中:

ID    FName   LName          City             Age
22333;Giannis;Georgakopoulos;Patisiwn, Athens;42
22222;Maria;Nikolakopoulou;Kabalas 33, Aigaleo;34
84567;Kostas;Santorinaios;Karaiskaki 44, Patisia;29

我已经开始使用以下代码,但我无法完成它。

public static void main(String[] args) throws Exception {

    BufferedReader br = new BufferedReader(new FileReader(".../testing"));
    String line = null;
    String[] pinakas=new String[6];

    int i=0;
    while (!(line=br.readLine()).equals(";")) {
         pinakas[i] = line;
         i++;

        System.out.println(line);
    }
    br.close();
}

【问题讨论】:

  • 你有没有想过创建Objects
  • Why is “Can someone help me?” not an actual question? 您需要更准确地了解您面临的问题。那么你的代码有什么问题?是什么阻止你完成它?
  • 提示:使用Scanner
  • ---为什么是“有人可以帮助我吗?”不是一个实际的问题?您需要更准确地了解您面临的问题。那么你的代码有什么问题?是什么阻止你完成它? ----我的问题是我可以用第一个元素填充一个数组(直到“;”)但我找不到读取文件其余部分的方法(在第一个“;”之后)并放置每一行从那里开始一个新的(或不)数组,所以之后有机会匹配两个数组......如果你有另一个想法来实现这一点,我很乐意听到这个......

标签: java arrays file split


【解决方案1】:
String data = null;

try {

    BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
    while ((data = bufferedReader.readLine()) != null) {
        String[] tempData = data.split("\t");
        for (int j = 0; j <= 4; j++) {
            dataFromFile[totalRecords][j] = (int) Float.parseFloat(tempData[j]);
        }
        totalRecords++;
    }
} catch (FileNotFoundException ex) {
    System.out.println("file not found");
} catch (IOException ex) {
    System.out.println("error in opening file");
}

在这里,我正在阅读完整的第一行并用空格分隔它。并将记录存储到 2by2 数组中。这可能对你有帮助!

【讨论】:

  • 首先,非常感谢您抽出宝贵时间。但我有一个“例外”指出这一行“dataFromFile[totalRecords][j] = (int) Float.parseFloat(tempData[j]);” ... ...我所做的唯一更改您的代码是在“for loop”之前设置“int totalRecords = 0; & int[][] dataFromFile = null;”。你知道我为什么会遇到这个问题吗?
  • 也许我想错了。你有什么建议可以用另一种方式完成吗?
  • 您遇到的异常是什么问题?我可以有堆栈跟踪吗?在当前代码中,您尝试将 Data 转换为 float 可能是问题所在。尝试改变它。请清楚地发布问题。
  • 问题是“totalRecords”和“dataFromFile”不能被解析成一个变量......请记住,我想要一个java程序,它将采用我给的格式的任何txt文件并取回(输出)第一行将具有的数组(id,fname,lname,adress,age - >它们每个都在一个单独的列中)并在这些名称下方放置我之前给出的元素,例如(12231,giannis, papadopoulos, karaiskaki 32, 45 等)......对不起,如果我不能更具体..我是 Java 编码的新手......
  • dataFromFile[totalRecords][j]= tempData[j];尝试在 for 循环中使用这一行。在这里,我们尝试读取第一行,根据空格将其拆分并将其读入 2 x 2 数组 dataFromFile[][] 。请声明并初始化这个数组。
【解决方案2】:

让我试着给你一点方向。

List<Person> list = new ArrayList<Person>();
String line;
try (
    // open an input stream
    InputStream fileInputStream = new FileInputStream("".../testing"");

    // read file as UTF-8
    InputStreamReader reader = new InputStreamReader(fileInputStream, Charset.forName("UTF-8"));

    // open a BufferedReader to read line-by-line
    BufferedReader br = new BufferedReader(reader);
) {
    while ((line = br.readLine()) != null) {
        // split the `line` on ";"
        // [0] - ID    
        // [1] - FName   
        // [2] - LName          
        // [3] - City             
        // [4] - Age
        String[] objects = line.split(";");
        int ID = Integer.parseInt(objects[0]);
        String fName = objects[1];
        String lName = objects[2];
        String city = objects[3];
        int age = Integer.parseInt(objects[4]);
        list.add( new Person(ID, fName, lName, city, age) );
    }
}

System.out.println(list);

了解Person 对象的外观。

class Person {
    int ID;
    String fName;
    String lName;
    String city;
    int age;

    public Person(int ID, String fName, String lName, String city, int age) {
        this.ID = ID;
        this.fName = fName;
        this.lName = lName;
        this.city = city;
        this.age = age;
    }

    @Override
    public String toString() {
        return ID + ";" + fName + ";" + lName + ";" + city ";" + age;
    }
}

打开的文件是逐行读取的。最好创建一个名为 Person 的对象,该对象将 ID、FName、LName、City 和 Age 作为字段。然后您可以为文件中的每一行创建一个新的List&lt;Person&gt; 条目。

这有帮助吗?

【讨论】:

  • 你为什么像 UT-8 一样阅读它? ....我已经尝试使用拆分“;”但我找不到获得我想要的结果的方法..我如何设置 ID 将是数字(22333 等)等等其中?
  • 你需要使用;,而不是`; `(无空格); UTF-8,因为您似乎不需要比它更大的任何东西。
  • @cseKostas 让我用实际使用 OOP的东西来更新它
  • @cseKostas 完成!看看吧:)
  • omg ...非常感谢..我找到了一种方法来使用 2 个 while 循环和 3 个 ArrayList(一个用于标题,一个用于其余元素 ...其中...)..我现在是电话号码,无法上传代码,但非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2013-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多