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字符。显然,它们是无效的输入
有两种解决方案:
InputStream
将编码设置为UTF-8正如@Seelenvirtuose所说,这是UTF-8编码的一个问题 但是,我相信您不需要编辑文本文件,只需更改
BufferedReader
,如下所示:
BufferedReader buffer = new BufferedReader(new InputStreamReader(
new FileInputStream(filename), StandardCharsets.UTF_8));
在记事本中创建文件,保存并再次尝试检查文件的编码,并相应地调整java
读取器
。谢谢,我一直在使用记事本创建文件,但我创建了一个新的记事本并修复了它。你能解释一下这些错误是什么意思吗?这意味着你的文件已经损坏,或者更有可能是以不同于你的文件阅读器预期的文本格式存储的。如果你不知道,你应该仔细阅读这些天存在的不同文本文件格式。你是对的。奇怪的我想我记得在早期的Java版本中,UTF-8字符集
类的解码器
没有处理BOM。现在显然是这样。但也许我错了。