从数组中读取数字,但显示的只是0

时间:2015-10-27 19:05:13

标签: 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 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);

}
}

我正在读取的文本文件只有26x26,整数为1或0。

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

at java.lang.NumberFormatException.forInputString(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at java.lang.Integer.parseInt(Unknown Source)

at is12177903.read_input(is12177903.java:31)

at is12177903.main(is12177903.java:83)

2 个答案:

答案 0 :(得分:2)

您的文件以UTF-8编码保存,并带有byte order mark(BOM)!

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

有两种解决方案:

  1. 删除BOM。 UTF-8物料清单非常简单,有很多程序无法处理。所以最好的是,没有它。

  2. 使用InputStream将编码设置为UTF-8,如@ budi的答案所示。

答案 1 :(得分:1)

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

但是,我相信您无需修改​​文字文件,只需更改BufferedReader即可:

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