Java 从文本文件添加数组值并打印它们

Java 从文本文件添加数组值并打印它们,java,arrays,Java,Arrays,在我的C驱动器中有一个名为new.txt的文本文件,我正试图使用java程序将该文件的内容用下面的程序放入多维数组中 package square; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.Reader; import java.nio.Buffer; import java.util.Arrays; import

在我的C驱动器中有一个名为
new.txt
的文本文件,我正试图使用java程序将该文件的内容用下面的程序放入多维数组中

package square;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.nio.Buffer;
import java.util.Arrays;
import java.util.Scanner;

public class Square {

    public static void main(String[] args) {
        String a[][] = new String[4][4];
        try {
            FileReader fr = new FileReader("C://new.txt");
            Scanner scanner=new Scanner(fr);
            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < i; j++) {
                    a[i][j] = scanner.next();
                }
            }
            System.out.print(Arrays.deepToString(a));
            scanner.close();
        } 

        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }
}
当我更改
a[i][j]=scanner.next()时
to
a[i][j]=scanner.nextInt()
并将数组类型更改为
int
m,它将引发以下异常

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at square.Square.main(Square.java:20)
请让我知道我哪里出了问题,以及如何修复它

我的文本文件的内容是

#####
#####
#####
#####
…..

默认的分隔符是空白。因为没有任何空白,所以读取的第一个字符串本身是#################################################但这个问题

String a[][] = new String[5][5];
Scanner scanner=new Scanner(fr).useDelimiter("");
for (int i = 0; i < 5; i++)
   for (int j = 0; j < 5; i++) {
       if(scanner.hasNext("\n"))
           scanner.next();
       a[i][j] = scanner.next();
      }

 System.out.print(Arrays.deepToString(a));
        scanner.close();
字符串a[][]=新字符串[5][5];
Scanner Scanner=新扫描仪(fr).useDelimiter(“”);
对于(int i=0;i<5;i++)
对于(int j=0;j<5;i++){
if(scanner.hasNext(“\n”))
scanner.next();
a[i][j]=scanner.next();
}
系统输出打印(数组.深度字符串(a));
scanner.close();

这里的问题很简单。首先查看您的文本文件:

#####
#####
#####
#####
…..
这里我们有5个代币(4个x'######和1个x'…)。看看: 在next()函数中

NoSuchElementException - if no more tokens are available
IllegalStateException - if this scanner is closed
因此,在扫描器读取最后一个标记,即“…”,之后,就没有更多可用的标记了

以下是我建议的解决方案:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Square {

    public static void main(String[] args) {
        String a[][] = new String[5][5];
        try {
            FileReader fr = new FileReader("new.txt");
            Scanner scanner=new Scanner(fr);
            ArrayList<String> l = new ArrayList<String>();
            while(scanner.hasNext())
            {
                l.add(scanner.next());
            }
            for(int i = 0; i < l.size(); ++i)
            {
                String toSplit = l.get(i);
                String[] splitted = toSplit.split("");
                for(int j = 0; j < splitted.length; ++j)
                {
                    a[i][j] = splitted[j];
                }
            }
            scanner.close();
        } 

        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // test the result
        for(int i = 0; i < a.length; ++i)
        {
            for(int j = 0; j < a[i].length; ++j)
            {
                System.out.println(a[i][j]);
            }
        }
    }
}
import java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.util.ArrayList;
导入java.util.Scanner;
公共课广场{
公共静态void main(字符串[]args){
字符串a[][]=新字符串[5][5];
试一试{
FileReader fr=new FileReader(“new.txt”);
扫描仪=新扫描仪(fr);
ArrayList l=新的ArrayList();
while(scanner.hasNext())
{
l、 添加(scanner.next());
}
对于(int i=0;i
注意:最后两行为空,因为最后一个标记有3个字符。 因此[4][3]和[4][4]将为空。

前面的一张快照:

请检查
字符串的两个维度。现在是

new String[4][4];
并允许存储16个值(4x4)。循环中使用的代码看起来需要更多的值。因此,我将数组增加到

new String[5][5];
现在回答您的问题:

为了避免
-循环的外部
中的固定值5,我在
-循环时将其替换为

int i=0;
while (scanner.hasNextLine()) {
  String line = scanner.nextLine();
  String[] separatedChars = line.split("(?!^)");
  for (int j = 0; j < 5; j++) {
    a[i][j] = separatedChars[j];
  }
  i++;
}
System.out.print(Arrays.deepToString(a));
scanner.close();

文本文件的内容真的是
#
还是数字?请提供一个真实的例子。首先,将for循环更改为
for(inti=0;i
或使用数组维度的类似内容。因为现在
<5
将超出范围。嗨@aioobe,这就是我文本文件中的确切内容。嗨@chancea,它仍然抛出相同的错误。我在java.util.Scanner.throwFor(未知源代码)的线程“main”java.util.NoSuchElementException中得到
异常在java.util.Scanner.next(未知源代码)在square.square.main(square.java:24)
Hi,这太棒了,可以按预期工作,但是你能帮我使用数组吗?谢谢你告诉我你到底想要什么?你想要一个多维数组,其中每个单元格都是一个字符吗?是的,这就是我想要的
int i=0;
while (scanner.hasNextLine()) {
  String line = scanner.nextLine();
  String[] separatedChars = line.split("(?!^)");
  for (int j = 0; j < 5; j++) {
    a[i][j] = separatedChars[j];
  }
  i++;
}
System.out.print(Arrays.deepToString(a));
scanner.close();
[[#, #, #, #, #], [#, #, #, #, #], [#, #, #, #, #], [#, #, #, #, #], [null, null, null, null, null]]s