Java 将文本文件扫描到ArrayList<;ArrayList<;字符串>&燃气轮机;
我正在尝试将文本文件读入Java 将文本文件扫描到ArrayList<;ArrayList<;字符串>&燃气轮机;,java,file-io,arraylist,pagerank,Java,File Io,Arraylist,Pagerank,我正在尝试将文本文件读入ArrayList 该文件看起来像: A D E F B A F C A B D D B C E B C D F F A B D G H A D F 以下是我的代码: private static void registerPages() throws IOException { Scanner input = new Scanner(new File(webPath)); //input.useDelimiter(" ");
ArrayList
该文件看起来像:
A D E F
B A F
C A B D
D B C
E B C D F
F A B D
G
H A D F
以下是我的代码:
private static void registerPages() throws IOException {
Scanner input = new Scanner(new File(webPath));
//input.useDelimiter(" ");
ArrayList<ArrayList<String>> arrayList = new ArrayList<>();
ArrayList<String> row = new ArrayList<>();
String tempStr;
String[] tempArr;
while (input.hasNextLine())
{
row.clear();
tempStr = input.nextLine(); //get row in string
tempArr = tempStr.split(" "); //split string into strings[]
Collections.addAll(row, tempArr); //add each strings[] to arrayList
arrayList.add(row); //add arrayList to arrayList
}
System.out.println("arrayList:\n" + arrayList);
}
想要的输出是:
arrayList:
[[H, A, D, F], [H, A, D, F], [H, A, D, F], [H, A, D, F], [H, A, D, F], [H, A, D, F], [H, A, D, F], [H, A, D, F]]
arrayList:
[[A, D, E, F], [B, A, F], [C, A, B, D], [D, B, C], [E, B, C, D, F], [F, A, B, D], [G], [H, A, D, F]]
仅供参考,
此文本文件应为webgraph。第一个词是网页。同一行中的下一个单词是链接到此网页的其他网页(在链接中)。最终,我应该编写“页面排名”算法
提前感谢。公共静态void main(字符串[]args){
public static void main(String[] args) {
File file = new File("webpath.txt"); // Your text file
ArrayList<List<String>> arrayList = new ArrayList<>();
try(Scanner sc = new Scanner(file)) {
List<String> arrayRow = new ArrayList<>();
while (sc.hasNextLine()) {
String line = sc.nextLine(); // Retrieve 1 line from the text file
String[] data = line.split(" "); // Splitting the characters and storing them
arrayRow = Arrays.asList(data); // Converting array to List
arrayList.add(arrayRow); // Adding row of characters to the final arraylist
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
// Looping through the result arraylist
for (List<String> array : arrayList) {
for(String item : array) {
System.out.print(item + " ");
}
System.out.println();
}
}
File File=新文件(“webpath.txt”);//您的文本文件
ArrayList ArrayList=新的ArrayList();
尝试(扫描仪sc=新扫描仪(文件)){
List arrayRow=新建ArrayList();
while(sc.hasNextLine()){
String line=sc.nextLine();//从文本文件中检索1行
String[]data=line.split(“”;//拆分字符并存储它们
arrayRow=Arrays.asList(数据);//将数组转换为列表
添加(arrayRow);//将字符行添加到最终的arrayList
}
}
catch(filenotfounde异常){
e、 printStackTrace();
}
//循环遍历结果数组列表
用于(列表数组:arrayList){
for(字符串项:数组){
系统输出打印(项目+“”);
}
System.out.println();
}
}
公共静态void main(字符串[]args){
File File=新文件(“webpath.txt”);//您的文本文件
ArrayList ArrayList=新的ArrayList();
尝试(扫描仪sc=新扫描仪(文件)){
List arrayRow=新建ArrayList();
while(sc.hasNextLine()){
String line=sc.nextLine();//从文本文件中检索1行
String[]data=line.split(“”;//拆分字符并存储它们
arrayRow=Arrays.asList(数据);//将数组转换为列表
添加(arrayRow);//将字符行添加到最终的arrayList
}
}
catch(filenotfounde异常){
e、 printStackTrace();
}
//循环遍历结果数组列表
用于(列表数组:arrayList){
for(字符串项:数组){
系统输出打印(项目+“”);
}
System.out.println();
}
}
问题在于,您正在重用并添加到arrayList
表示行的列表的同一个实例(因此它打印的是当前/上次状态的N倍)。您应该为每一行创建新的列表,然后将其添加到主列表中
所以只需移动ArrayList row=new ArrayList()循环中的code>和。问题是您正在重用并添加到表示行的列表的的同一个实例中(因此它打印的是当前/上次状态的N倍)。您应该为每一行创建新的列表,然后将其添加到主列表中
所以只需移动ArrayList row=new ArrayList()在循环中使用code>,并使用。而不是使用row.clear()
尝试在每次迭代中实例化行。
row=newarraylist()
提示:
您只创建了一次行
。所以arrayList中的所有项目持有者都指向同一个内存块。您必须创建新实例(内存中的真实对象),以便它们可以保存不同的值。而不是使用row.clear()
尝试在每次迭代中实例化行。
row=newarraylist()
提示:
您只创建了一次行
。所以arrayList中的所有项目持有者都指向同一个内存块。您必须创建新实例(内存中的真实对象),以便它们可以保存不同的值。您在arrayList中多次添加同一行。每次修改同一行,最后多次只插入最后一行。每次都必须创建新行:放置行
ArrayList行=新的ArrayList();
代替
row.clear() 在arrayList中多次添加同一行。每次修改同一行,最后多次只插入最后一行。每次都必须创建新行:放置行
ArrayList行=新的ArrayList();
代替
row.clear()
代码的问题在于,您一直在同一个行
实例上操作。主arrayList
实例多次在其中包含列表的同一实例,并且您不断地重新添加同一实例,每次都为其清除和设置新数据。这就是为什么在arrayList
的所有条目上都会看到相同的结果-它基本上多次包含相同的列表。这是因为列表是一个可变对象——它的状态可以修改,通过将它传递给另一个数据结构,并不妨碍它在另一个数据结构中反映对它所做的更改。传递一个对象(例如,传递给另一个方法)并不意味着复制它的内容,而是与另一个方法共享该对象。两者都看到相同的对象,并且对共享对象的更改对双方都可见
代码的问题在于,您一直在同一个行
实例上操作。主arrayList
实例多次在其中包含列表的同一实例,并且您不断地重新添加同一实例,每次都为其清除和设置新数据。这就是为什么在arrayList
的所有条目上都会看到相同的结果-它基本上多次包含相同的列表。这是因为列表是一个可变对象——它的状态可以修改,通过将它传递给另一个数据结构,并不妨碍它在另一个数据结构中反映对它所做的更改。传递一个对象(例如,传递给另一个方法)并不意味着复制它的内容,而是与另一个方法共享该对象。两者都看到相同的对象,并且对共享对象的更改对双方都可见。错误与读取没有直接关系
public static void main(String[] args) throws IOException {
registerPages(new FileReader("test.txt"));
}
private static void registerPages(Reader reader) throws IOException {
Scanner input = new Scanner(reader);
List<List<String>> arrayList = new ArrayList<>();
while (input.hasNextLine()) {
List<String> row = new ArrayList<>();
Collections.addAll(row, input.nextLine().split(" "));
arrayList.add(row);
}
System.out.println("arrayList:\n" + arrayList);
}
arrayList:
[[A, D, E, F], [B, A, F], [C, A, B, D], [D, B, C], [E, B, C, D, F], [F, A, B, D], [G], [H, A, D, F]]