Java 从文本文件读取数据并使用数组构建表
我有一个名为“anives.txt”的输入文件: 简单地说,我想知道如何将4列数据从输入文件存储到4个独立的一维数组中 输出应该是这样的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
[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;
}
}