我正在抛出异常,我认为必须在子字符串中使用ArrayIndexOutOfBounds
,并且您认为以下方法可用于在解析后将数据传递给我的数组
我想在每行上从这样的txt文件中读取它:
1
0
1
0
0
1
0
每行一个整数!!
String fileName = "input.txt";
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()){
data1 = scanner.nextLine();
}
for ( int i = 0; i < data1.length(); i++)
{
covertDataArray[i] = Byte.parseByte(data1.substring( i, i+1));
}
这是以前的工作版本,但它从控制台读取。它会在哪里:1010101001
System.out.println("Enter the binary bits");
data1 = in.next();
for ( int i = 0; i < data1.length(); i++)
{
covertDataArray[i] = Byte.parseByte(data1.substring( i, i+1));
}
答案 0 :(得分:1)
您正在阅读所有行,只保留data1
变量中的最后一行。这可能是你的问题。
相反,您应该在阅读文件时立即处理每个值,并构建ArrayList
而不是数组(因为您事先不知道它的大小):
String fileName = "input.txt";
File file = new File(fileName);
Scanner scanner = new Scanner(file);
ArrayList<Byte> covertDataList= new ArrayList<>();
while(scanner.hasNextLine()){
String line = scanner.nextLine(); // the line should be just a number
covertDataList.add(Byte.parseByte(line)); // no substring needed
}
如果您希望在文件格式错误时失败,则可以parseByte
/ try
阻止catch
。
如果您想将列表用作数组,您可以:
covertDataList.get(i)
代替covertDataArray[i]
covertDataList.set(i, value);
代替covertDataArray[i] = value;
如果你真的需要一个阵列(我不明白这里的意思),你可以这样做:
Byte[] covertDataArray = covertDataList.toArray(new Byte[list.size()]);