我要做的是将文本文件放在矩阵数组中,然后显示所有数字。我有它来显示数字,但它们都是零。
这是我的代码:
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)
答案 0 :(得分:2)
您的文件以UTF-8编码保存,并带有byte order mark(BOM)!
UTF-8字节顺序标记恰好由三个字节组成:0xEF 0xBB 0xBF
。您正在实例化FileReader
,它将使用平台默认编码。在许多情况下,这是ISO-8859-1。您看到的字符是这三个字节的ISO-8859-1字符。显然它们是无效的输入。
有两种解决方案:
删除BOM。 UTF-8物料清单非常简单,有很多程序无法处理。所以最好的是,没有它。
使用InputStream
将编码设置为UTF-8,如@ budi的答案所示。
答案 1 :(得分:1)
正如@Seelenvirtuose所说,这是UTF-8编码的一个问题。
但是,我相信您无需修改文字文件,只需更改BufferedReader
即可:
BufferedReader buffer = new BufferedReader(new InputStreamReader(
new FileInputStream(filename), StandardCharsets.UTF_8));