我正在尝试阅读文件。我想将文件的内容存储在2D arraylist中,其中列表中的每个位置都包含一个字符。我想要它,以便原始文本文件中的每一行都是数组列表中的一行。例如,如果文本文件的输入是:
A,B,C
d,E,F
克,H,I
然后数组有望看起来像: {[A,B,C],[d,E,F],[G,H,I]}。不幸的是,目前我的结果只是[a,b,c,d,e,f,g,h,i]。 任何想法将不胜感激,我是Java新手。感谢。
import java.util.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Coursework1
{
public static void main(String[] args)
{
try {
List<String> list = new ArrayList<String>();
String thisLine = null;
BufferedReader br;
br = new BufferedReader(new FileReader("map.txt"));
while ((thisLine = br.readLine()) != null) {
list.add(thisLine);
}
char[][] firstDimension = new char[list.size()][];
for (int i = 0; i < list.size(); i++) {
firstDimension[i] = list.get(i).toCharArray();
}
for (int i=0;i<firstDimension.length;i++) {
for (int j=0;j<firstDimension[i].length;j++) {
System.out.println(firstDimension[i][j]);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
你的答案实际上是正确的并且功能齐全。您的测试代码是错误的,因为它会添加太多新行。
for (int i=0;i<firstDimension.length;i++)
{
System.out.println();
for (int j=0;j<firstDimension[i].length;j++)
{
System.out.print(firstDimension[i][j]);
}
}
答案 1 :(得分:2)
您似乎没有完全理解数组和数组列表之间的区别。
数组是一个容器对象,它包含固定数量的单个类型的值。创建数组时,将建立数组的长度。创建后,其长度是固定的。因此,您必须在创建之前知道大小,或者必须创建足够大小的大小。
另一方面, ArrayList 是一个集合(复杂类型,请参阅this tutorial以获取更多信息),它可以容纳简单的对象,集合,... ArrayList可以想象为动态数组 - 您不必知道初始大小,如果您添加或删除元素,它会自动调整大小。
像这样迭代ArrayList是个好习惯
List<String> names = new ArrayList<String>();
// add something
// foreach loop
for (String name : names) {
// here you have access directly to the value
// and you don't have to write list.get(index)
System.out.println(name);
}
现在问你。如果您阅读上面的链接,您应该能够自己构建它。但如果你还是不知道:
List<List<String>> twoDimensionList = new ArrayList<List<String>>();
使用foreach循环进行迭代
for (List<String> innerList : twoDimensionList) {
for (String value : innerList) {
...
}
}
答案 2 :(得分:1)
您可以在列表中嵌入列表,如:
List<List<String>> matrix = new ArrayList<List<String>>();
然后访问你要做的元素,
matrix.get(1).get(2);
编辑:我还建议您考虑更多关于是否需要数组或 ArrayList 。他们不一样。可以调整数组列表的大小(您可以继续在其上添加越来越多的元素,您不必强制在数组列表中只有这么多元素。这允许您执行诸如List<List<String>>
对象之类的操作每个第二个维度都是相同的长度。另一方面,数组具有与之关联的特定大小,这将使您能够强制所有行具有相同的长度,并且所有列具有相同的高度...
答案 3 :(得分:0)
您的代码有效,您只是打印错误的结果。尝试:
for (int i = 0; i < firstDimension.length; i++)
{
for (int j = 0; j < firstDimension[i].length; j++)
{
System.out.print(firstDimension[i][j]);
}
System.out.println();
}
这打印同一行上的字符,同一行......
答案 4 :(得分:0)
每一行(String)已经是一个字符列表,其中的方法可以让你迭代它(length,charAt)。因此,根据您要实现的目标,字符串列表可能就足够了。