Java 从数组中读取数字,但所有数据都是';s显示为0';s

Java 从数组中读取数字,但所有数据都是';s显示为0';s,java,arrays,text-files,Java,Arrays,Text Files,我要做的是把一个文本文件放到一个矩阵数组中,然后显示所有的数字。我用它来显示数字,但它们都是零 这是我的密码: import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class is12177903 { public static int[][] read_input(String fi

我要做的是把一个文本文件放到一个矩阵数组中,然后显示所有的数字。我用它来显示数字,但它们都是零

这是我的密码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class is12177903 
{
public static int[][] read_input(String filename) throws FileNotFoundException
{
    int matrix [][] = null;

    BufferedReader buffer = new BufferedReader(new FileReader(filename));
    String line;
    int row = 0;
    int size = 0;
    try {
        while ((line = buffer.readLine()) != null) 
        {
            String[] vals = line.trim().split("\\s+");


            if (matrix == null) 
            {
                size = vals.length;

                matrix = new int[size][size];
            }

            for (int col = 0; col < size; col++) 
            {
                matrix[row][col] = Integer.parseInt(vals[col]); //this is line 31
            }

            row++;
        }
    } catch (NumberFormatException e) 
    {
        e.printStackTrace();
    } catch (IOException e) 
    {
        e.printStackTrace();
    }

    return matrix;

}

public static void printMatrix(int[][] matrix)
{
    String str = "";
    int size = matrix.length;


    if (matrix != null) {
        for (int row = 0; row < size; row++)
        {
            str += " ";
            for (int col = 0; col < size; col++)
            {
                str += String.format("%2d",  matrix[row][col]);
                if (col < size - 1) 
                {
                    str += "";
                }
            }
            if (row < size - 1) 
            {
                str += "\n";


            } 
        }
    }

   System.out.println(str); 
}

public static void main(String[] args) 
{
    int[][] matrix = null;

    try {
        matrix = read_input("AI2015.txt"); // this is line 83
    } catch (Exception e) {
        e.printStackTrace();
    }

    printMatrix(matrix);

}
}
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
公共类是12177903
{
公共静态int[]read_输入(字符串文件名)引发FileNotFoundException
{
int矩阵[][]=null;
BufferedReader buffer=新的BufferedReader(新文件读取器(文件名));
弦线;
int行=0;
int size=0;
试一试{
而((line=buffer.readLine())!=null)
{
字符串[]vals=line.trim().split(\\s+);
if(矩阵==null)
{
大小=vals.length;
矩阵=新整数[大小][大小];
}
for(int col=0;col
我从中读取的文本文件是26x26,整数为1或0

我每次运行时都会出现一些错误,我不确定它们的含义: java.lang.NumberFormatException:用于输入字符串:“ï»0”

位于java.lang.NumberFormatException.forInputString(未知源)

位于java.lang.Integer.parseInt(未知源)

位于java.lang.Integer.parseInt(未知源)

读取输入(is12177903.java:31)

在is12177903.main(is12177903.java:83)

中,您的文件以编码方式保存,并带有(BOM)

UTF-8字节顺序标记正好由三个字节组成:
0xEF 0xBB 0xBF
。您正在实例化一个
文件读取器
,它将使用平台默认编码。在许多情况下,这是ISO-8859-1。您看到的字符是这三个字节的ISO-8859-1字符。显然,它们是无效的输入

有两种解决方案:

  • 删除BOM表。UTF-8 BOM确实不常见,而且有许多程序无法处理它。所以最好的办法是,不要拥有它

  • 使用@budi的答案中的
    InputStream
    将编码设置为UTF-8


  • 正如@Seelenvirtuose所说,这是UTF-8编码的一个问题

    但是,我相信您不需要编辑文本文件,只需更改
    BufferedReader
    ,如下所示:

    BufferedReader buffer = new BufferedReader(new InputStreamReader(
        new FileInputStream(filename), StandardCharsets.UTF_8));
    

    在记事本中创建文件,保存并再次尝试检查文件的编码,并相应地调整java
    读取器
    。谢谢,我一直在使用记事本创建文件,但我创建了一个新的记事本并修复了它。你能解释一下这些错误是什么意思吗?这意味着你的文件已经损坏,或者更有可能是以不同于你的文件阅读器预期的文本格式存储的。如果你不知道,你应该仔细阅读这些天存在的不同文本文件格式。你是对的。奇怪的我想我记得在早期的Java版本中,UTF-8
    字符集
    类的
    解码器
    没有处理BOM。现在显然是这样。但也许我错了。