尝试将文本从文件插入到二维数组。 Java。文本格式不同
Trying to insert text from file to 2D array. Java. Text is different formats
所以我有一个文本文件,其中包含我需要读入二维数组的整数、双精度数和字符串。 Array 应该有 6 列,但在您阅读整个文件之前,这些行是未知的。我猜这是大约 700 行这是我到目前为止所拥有的。如果我删除数组,它会打印得很好,但是对于数组,我会不断出错。
我已经搜索了很多这样的问题,但它们通常只适用于 ints/doubles。也请不要推荐 arrayList,因为我们的课程中没有教过它。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class TitanicApp {
public static void main(String[] args) throws FileNotFoundException {
String[][] array=null;
int i=0, j=0;
String fileLine;
String s;
Scanner scannerIn=null;
BufferedReader inputStream=null;
try{
inputStream = new BufferedReader(new FileReader("titanic.txt"));
scannerIn = new Scanner(inputStream);
while ((fileLine = inputStream.readLine()) != null){
for (j=0;j<6;j++){
array [i][j]=scannerIn.next();
System.out.println(array[i][j]);
i++;
}
}
}
catch (IOException ex){
ex.printStackTrace();
}
}
文件中的示例文本:
1 1 Allen, Miss. Elisabeth Walton female 29 211.3375
1 1 Allison, Master. Hudson Trevor male 0.9167 151.5500
输出应该是:
[ [1, 1, Allen, Miss. Elisabeth Walton, female, 29, 211.3375]
[1, 1, Allison, Master. Hudson Trevor, male, 0.9167, 151.5500]
]
我有一个包含上述信息(以及更多行)的 txt 文件,我需要将其放入一个二维数组中。由于有限制,我不得不删除一半以上。
从外观上看,您正在同时递增两个数组位置(i 和 j)。如果您希望输入在数组中按顺序递增 j 直到 array.size,然后递增 i。一个例子是嵌套的 for 循环。
for(int i = 0; i < array.size; i++){
for(int j = 0; j < array.size; j++){
array[i][j] = scanner.next();
System.out.println(array[i][j]);
}
}
或者在你的情况下,停止增加值直到 i 和 j 达到 6 而不是 array.size
我认为您需要为您的 String[][] 声明一个大小,否则您将得到 NullPointerException。据我所知,ArrayLists 是唯一动态生成列表的方法。
所以您想只使用数组来完成。您可以考虑以下示例作为参考 -
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TitanicApp {
int size = 10;
int colCount = 6;
String[][] array = null;
public static void main(String[] args) {
TitanicApp app = new TitanicApp();
app.startExec();
}
public void startExec() {
array = new String[size][colCount];
String fileLine;
int i=0;
try
{
BufferedReader inputStream = new BufferedReader(new FileReader("C:/titanic.txt"));
while ((fileLine = inputStream.readLine()) != null) {
addTo2DArray(fileLine.split("\t"), ++i);
}
inputStream.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
// Now you have the desired array : array;
}
public void addTo2DArray(String[] tmpArray, int minCapacity) {
if((minCapacity > size)) {
size = (size * 3)/2 + 1;
String[][] newArray = new String[size][colCount];
for(int i=0; i<array.length; i++) {
for(int j=0; j<array[i].length; j++) {
newArray[i][j]=array[i][j];
}
}
array = newArray;
}
array[minCapacity-1] = tmpArray;
}
}
另一个解决方案:
String content = new Scanner(new File("/titanic.txt")).useDelimiter("\Z").next();
String[] rows = content.split("\n");
String[][] finalArray = new String[rows.length][];
for(int i=0; i<rows.length; i++)
{
finalArray[i] = rows[i].split("\t");
}
//Your desired array is : finalArray;
所以我有一个文本文件,其中包含我需要读入二维数组的整数、双精度数和字符串。 Array 应该有 6 列,但在您阅读整个文件之前,这些行是未知的。我猜这是大约 700 行这是我到目前为止所拥有的。如果我删除数组,它会打印得很好,但是对于数组,我会不断出错。 我已经搜索了很多这样的问题,但它们通常只适用于 ints/doubles。也请不要推荐 arrayList,因为我们的课程中没有教过它。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class TitanicApp {
public static void main(String[] args) throws FileNotFoundException {
String[][] array=null;
int i=0, j=0;
String fileLine;
String s;
Scanner scannerIn=null;
BufferedReader inputStream=null;
try{
inputStream = new BufferedReader(new FileReader("titanic.txt"));
scannerIn = new Scanner(inputStream);
while ((fileLine = inputStream.readLine()) != null){
for (j=0;j<6;j++){
array [i][j]=scannerIn.next();
System.out.println(array[i][j]);
i++;
}
}
}
catch (IOException ex){
ex.printStackTrace();
}
}
文件中的示例文本:
1 1 Allen, Miss. Elisabeth Walton female 29 211.3375
1 1 Allison, Master. Hudson Trevor male 0.9167 151.5500
输出应该是:
[ [1, 1, Allen, Miss. Elisabeth Walton, female, 29, 211.3375]
[1, 1, Allison, Master. Hudson Trevor, male, 0.9167, 151.5500]
]
我有一个包含上述信息(以及更多行)的 txt 文件,我需要将其放入一个二维数组中。由于有限制,我不得不删除一半以上。
从外观上看,您正在同时递增两个数组位置(i 和 j)。如果您希望输入在数组中按顺序递增 j 直到 array.size,然后递增 i。一个例子是嵌套的 for 循环。
for(int i = 0; i < array.size; i++){
for(int j = 0; j < array.size; j++){
array[i][j] = scanner.next();
System.out.println(array[i][j]);
}
}
或者在你的情况下,停止增加值直到 i 和 j 达到 6 而不是 array.size
我认为您需要为您的 String[][] 声明一个大小,否则您将得到 NullPointerException。据我所知,ArrayLists 是唯一动态生成列表的方法。
所以您想只使用数组来完成。您可以考虑以下示例作为参考 -
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TitanicApp {
int size = 10;
int colCount = 6;
String[][] array = null;
public static void main(String[] args) {
TitanicApp app = new TitanicApp();
app.startExec();
}
public void startExec() {
array = new String[size][colCount];
String fileLine;
int i=0;
try
{
BufferedReader inputStream = new BufferedReader(new FileReader("C:/titanic.txt"));
while ((fileLine = inputStream.readLine()) != null) {
addTo2DArray(fileLine.split("\t"), ++i);
}
inputStream.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
// Now you have the desired array : array;
}
public void addTo2DArray(String[] tmpArray, int minCapacity) {
if((minCapacity > size)) {
size = (size * 3)/2 + 1;
String[][] newArray = new String[size][colCount];
for(int i=0; i<array.length; i++) {
for(int j=0; j<array[i].length; j++) {
newArray[i][j]=array[i][j];
}
}
array = newArray;
}
array[minCapacity-1] = tmpArray;
}
}
另一个解决方案:
String content = new Scanner(new File("/titanic.txt")).useDelimiter("\Z").next();
String[] rows = content.split("\n");
String[][] finalArray = new String[rows.length][];
for(int i=0; i<rows.length; i++)
{
finalArray[i] = rows[i].split("\t");
}
//Your desired array is : finalArray;