Java 从文本文件读取数据并使用数组构建表

Java 从文本文件读取数据并使用数组构建表,java,arrays,io,Java,Arrays,Io,我有一个名为“anives.txt”的输入文件: 简单地说,我想知道如何将4列数据从输入文件存储到4个独立的一维数组中 输出应该是这样的 [sheep, horse, cow, duck, pig] [10.5, 8.4, 13.7, 23.2, 12.4] [12.3, 11.2, 7.2, 2.5, 4.6] [4, 7, 10, 23, 12] 到目前为止,我已经知道如何将所有数据存储到一个大数组中,但我需要知道如何将其分解并将每个列存储到自己的数组中 我的代码: public stat

我有一个名为“anives.txt”的输入文件:

简单地说,我想知道如何将4列数据从输入文件存储到4个独立的一维数组中

输出应该是这样的

[sheep, horse, cow, duck, pig]
[10.5, 8.4, 13.7, 23.2, 12.4]
[12.3, 11.2, 7.2, 2.5, 4.6]
[4, 7, 10, 23, 12]
到目前为止,我已经知道如何将所有数据存储到一个大数组中,但我需要知道如何将其分解并将每个列存储到自己的数组中

我的代码:

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

    String[] animal = new String[5];
    int index = 0;

    File file = new File("animals.txt");
    Scanner input = new Scanner(file);

    while (input.hasNextLine() && index < animal.length) {
        animal[index] = input.nextLine();
        index++;
    }
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
字符串[]动物=新字符串[5];
int指数=0;
File File=新文件(“anives.txt”);
扫描仪输入=新扫描仪(文件);
while(input.hasNextLine()&&index
如果输入文件的结构得到保证,则可以使用扫描仪获取所需的数据。首先用适当的类型声明所需的4个数组

然后在while循环中使用:

  input.next()
获取字符串

  input.nextInt()
得到一个整数,然后

  input.nextDouble()

获取双精度值。当然,您可以将这些值分配给相应的数组。

您可以使用数组数组来存储所需的内容,例如:

String[][] animal = new String[5][];
然后,在读取文件时,存储所有值的数组,如下所示:

while (input.hasNextLine() && index < animal.length) {
    animal[index] = input.nextLine().split(" "); //split returns an array
    index++;
}
while(input.hasNextLine()&&index
然后,当您想要输出时,只需在数组数组上循环:

for (String[] a : animal)
{
    for (int i = 0; i < a.length; i++)
        System.out.print(a[i] + ", ");
    System.out.println("");
}
for(字符串[]a:动物)
{
for(int i=0;i
下面是一种方法的代码-您可以将其剪切并粘贴到IDE(如eclipse)中的java项目中,然后运行它或将其放入file.java中,然后在命令行上编译并运行它。下一步是使其完全通用,以获取任何输入,包括具有可变列数的行,没有预先确定的最大值,也没有读取将输入文件保存两次或将其存储为数组或其他对象

import java.io.File;
import java.io.FileNotFoundException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class BuildTableWithArrays {

    private static final String separator = "\\s+"; // regex for parsing lines
    private static final int rowWidth = 4;

    public static void main(String[] args) {

        Map<Integer, ArrayList<String>> columns = buildMapWithColumnArrayLists("animals.txt");
        printMap(columns);  // for demo
        // if you want actual arrays
        Map<Integer, String[]> colArrays = buildMapWithColumnArrays(columns);

    }

    public static Map<Integer, ArrayList<String>> buildMapWithColumnArrayLists(
        String fileName) {

        ArrayList<String> col0 = new ArrayList<String>();
        ArrayList<String> col1 = new ArrayList<String>();
        ArrayList<String> col2 = new ArrayList<String>();
        ArrayList<String> col3 = new ArrayList<String>();

        Map<Integer, ArrayList<String>> columns = new HashMap<Integer, ArrayList<String>>();
        columns.put(0, col0);
        columns.put(1, col1);
        columns.put(2, col2);
        columns.put(3, col3);

        File file = new File(fileName);
        try {
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                String[] line = input.nextLine().trim().replaceAll(separator, " ")
                    .split(separator);
                for (int i = 0; i < rowWidth; i++) {
                    if (line[i] == null) {
                        columns.get(Integer.valueOf(i)).add("null");
                    } else {
                        columns.get(Integer.valueOf(i)).add(line[i]);
                    }
                }
            }
            input.close();
        } catch (FileNotFoundException x) {
            System.out.println(x.getMessage());
        }

        return columns;
    }

    public static void printMap(Map<Integer, ArrayList<String>> columns) {

        for (int i = 0; i < rowWidth; i++) {
            System.out.println("col" + i + " #elements = "
                + columns.get(Integer.valueOf(i)).size());
            for (String s : columns.get(Integer.valueOf(i))) {
                System.out.print(s + " ");
            }
            System.out.println("\n");
        }
    }

    public static String[] convertArrayList2Array (ArrayList<String> arrayList) {

        String[] array = new String[arrayList.size()];
        array = arrayList.toArray(array);
        return array;

    }

    public static Map<Integer, String[]> buildMapWithColumnArrays(Map<Integer, ArrayList<String>> columns) {

        Map<Integer, String[]> cols = new HashMap<Integer, String[]>(); 

        for (Map.Entry<Integer, ArrayList<String>> entry : columns.entrySet()) {
            Integer key = entry.getKey();
            ArrayList<String> value = entry.getValue();
            String[] val = convertArrayList2Array(value);
            cols.put(key,val);
        }

        return cols;

    }

}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Scanner;
公共类BuildTableWithArray{
私有静态最终字符串分隔符=“\\s+”;//用于分析行的正则表达式
私有静态final int rowWidth=4;
公共静态void main(字符串[]args){
MapColumns=buildMapWithColumnArrayList(“anives.txt”);
printMap(列);//用于演示
//如果你想要实际的数组
Map colArrays=buildMapWithColumnArrays(列);
}
公共静态地图BuildMapWithColumnArrayList(
字符串(文件名){
ArrayList col0=新的ArrayList();
ArrayList col1=新的ArrayList();
ArrayList col2=新的ArrayList();
ArrayList col3=新的ArrayList();
Map columns=newhashmap();
列。put(0,col0);
列。put(1,col1);
列。put(2,col2);
列。put(3,col3);
文件=新文件(文件名);
试一试{
扫描仪输入=新扫描仪(文件);
while(input.hasNextLine()){
String[]line=input.nextLine().trim().replaceAll(分隔符“”)
.分离(分离器);
for(int i=0;i
import java.io.File;
import java.io.FileNotFoundException;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class BuildTableWithArrays {

    private static final String separator = "\\s+"; // regex for parsing lines
    private static final int rowWidth = 4;

    public static void main(String[] args) {

        Map<Integer, ArrayList<String>> columns = buildMapWithColumnArrayLists("animals.txt");
        printMap(columns);  // for demo
        // if you want actual arrays
        Map<Integer, String[]> colArrays = buildMapWithColumnArrays(columns);

    }

    public static Map<Integer, ArrayList<String>> buildMapWithColumnArrayLists(
        String fileName) {

        ArrayList<String> col0 = new ArrayList<String>();
        ArrayList<String> col1 = new ArrayList<String>();
        ArrayList<String> col2 = new ArrayList<String>();
        ArrayList<String> col3 = new ArrayList<String>();

        Map<Integer, ArrayList<String>> columns = new HashMap<Integer, ArrayList<String>>();
        columns.put(0, col0);
        columns.put(1, col1);
        columns.put(2, col2);
        columns.put(3, col3);

        File file = new File(fileName);
        try {
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                String[] line = input.nextLine().trim().replaceAll(separator, " ")
                    .split(separator);
                for (int i = 0; i < rowWidth; i++) {
                    if (line[i] == null) {
                        columns.get(Integer.valueOf(i)).add("null");
                    } else {
                        columns.get(Integer.valueOf(i)).add(line[i]);
                    }
                }
            }
            input.close();
        } catch (FileNotFoundException x) {
            System.out.println(x.getMessage());
        }

        return columns;
    }

    public static void printMap(Map<Integer, ArrayList<String>> columns) {

        for (int i = 0; i < rowWidth; i++) {
            System.out.println("col" + i + " #elements = "
                + columns.get(Integer.valueOf(i)).size());
            for (String s : columns.get(Integer.valueOf(i))) {
                System.out.print(s + " ");
            }
            System.out.println("\n");
        }
    }

    public static String[] convertArrayList2Array (ArrayList<String> arrayList) {

        String[] array = new String[arrayList.size()];
        array = arrayList.toArray(array);
        return array;

    }

    public static Map<Integer, String[]> buildMapWithColumnArrays(Map<Integer, ArrayList<String>> columns) {

        Map<Integer, String[]> cols = new HashMap<Integer, String[]>(); 

        for (Map.Entry<Integer, ArrayList<String>> entry : columns.entrySet()) {
            Integer key = entry.getKey();
            ArrayList<String> value = entry.getValue();
            String[] val = convertArrayList2Array(value);
            cols.put(key,val);
        }

        return cols;

    }

}