Java,将文件输入到2D数组
我对Java真的很陌生。我试图从我在eclipse中创建的输入文件中获取值,并试图将它们保存到2D数组中。输入为: 3122379 20-33 1 3-146-6 我可以很好地将它保存到常规数组中,但不管我尝试了什么,我都不知道如何将它保存到上面表单中的2d数组中。我尝试了循环,但它为循环的每次迭代保存了所有12个数字。我试着使用变量,只是像对常规数组那样递增它们,结果什么也没有保存。有关如何执行此操作的任何帮助,请参阅下面的常规数组代码,并将以下内容打印到屏幕: [31,22,23,79,20,-33,33,1,3,-1,46,-6]Java,将文件输入到2D数组,java,arrays,Java,Arrays,我对Java真的很陌生。我试图从我在eclipse中创建的输入文件中获取值,并试图将它们保存到2D数组中。输入为: 3122379 20-33 1 3-146-6 我可以很好地将它保存到常规数组中,但不管我尝试了什么,我都不知道如何将它保存到上面表单中的2d数组中。我尝试了循环,但它为循环的每次迭代保存了所有12个数字。我试着使用变量,只是像对常规数组那样递增它们,结果什么也没有保存。有关如何执行此操作的任何帮助,请参阅下面的常规数组代码,并将以下内容打印到屏幕: [31,22,23,79,20
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class ArrayMatrix2d {
public static void main(String[] args) {
// TODO Auto-generated method stub
if (args.length == 0){
System.err.println("Usage: java Sum <filename>");
System.exit(1);
}
try {
//int[][] matrix = new int[3][4];
int MyMat[] = new int[12];
int num = 0;
//int row = 0;
//int column = 0;
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String line;
while((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer (line);
while (st.hasMoreTokens()){
int value1 = Integer.parseInt(st.nextToken());
MyMat[num] = value1;
num++;
}
}
System.out.println(Arrays.toString(MyMat));
br.close();
}
catch(Exception e) {}
}
import java.io.*;
导入java.util.array;
导入java.util.StringTokenizer;
公共类数组矩阵x2d{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
如果(args.length==0){
System.err.println(“用法:javasum”);
系统出口(1);
}
试一试{
//int[][]矩阵=新int[3][4];
int MyMat[]=新int[12];
int num=0;
//int行=0;
//int列=0;
BufferedReader br=新的BufferedReader(新文件读取器(args[0]);
弦线;
而((line=br.readLine())!=null){
StringTokenizer st=新的StringTokenizer(行);
而(st.hasMoreTokens()){
int value1=Integer.parseInt(st.nextToken());
MyMat[num]=value1;
num++;
}
}
System.out.println(Arrays.toString(MyMat));
br.close();
}
捕获(例外e){}
}
}如果您使用Java 7,您可以将文本文件加载到
列表中。据我所知,这是创建字符串[][]的最短方法
String[][] root;
List<String> lines = Files.readAllLines(Paths.get("<your filename>"), StandardCharsets.UTF_8);
lines.removeAll(Arrays.asList("", null)); // <- remove empty lines
root = new String[lines.size()][];
for(int i =0; i<lines.size(); i++){
root[i] = lines.get(i).split("[ ]+"); // you can use just split(" ") but who knows how many empty spaces
}
String[][]根目录;
列表行=Files.readAllLines(path.get(“”),StandardCharsets.UTF_8);
lines.removeAll(Arrays.asList(“,null));// 你可以这样制作你的矩阵
int[][] matrix=new int[3][]; //if the number of columns is variable
int[][] matrix=new int[3][4]; //if you know the number of columns
在循环中你得到了
int i=0;
while((line = br.readLine()) != null) {
StringTokenizer st = new StringTokenizer (line);
int num=0;
//the next line is when you need to calculate the number of columns
//otherwise leave blank
matrix[i]=new int[st.countTokens()];
while (st.hasMoreTokens()){
int value1 = Integer.parseInt(st.nextToken());
matrix[i][num] = value1;
num++;
}
i++;
}
希望我的代码对您有用:
java.util.Scanner scan = new java.util.Scanner(System.in);
int [] ar= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int m=ar[0];
int n=ar[1];
int myArray[][]=new int[m][n];
for (int i = 0; i < m; i++)
myArray[i]= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
java.util.Scanner scan=new java.util.Scanner(System.in);
int[]ar=Arrays.stream(scan.nextLine().split(“”).mapToInt(Integer::parseInt).toArray();
int m=ar[0];
int n=ar[1];
int myArray[][]=新的int[m][n];
for(int i=0;i
谢谢您的帮助。我现在得到以下输出:[[31,22,23,79],null,null]。我可能是打错了什么的,我会试着找到它,但方向肯定是对的。看来你的第二排和第三排都没有建好。啊哈,明白了,非常感谢。只是把我的打印声明放错地方了。非常感谢。您好,我真的很感谢您的帮助,但是我的Java太基础了,我不明白这里发生了什么。谢谢你!您可以尝试调试并观察其工作方式。只有第一行,您就可以输入文件名并获得行列表。第二行删除文件中的所有空行。所以你把你的代码从20行删减到4行,我会试试看,看看它是如何工作的,无论如何我都在努力学习。谢谢