我正在尝试创建一个逐行读取文件的split()
方法,然后将String
和Integer
分成一个数组,然后写入另一个文件。我创建了一个数组来保存名为String
的每个list
,并保存一个名为Integer
的{{1}}。
当我尝试运行我的代码时,它到达scores
数组中的第二个元素list
,然后我收到错误。
我最终要做的是拆分每个元素并获得整数的平均值,以便原始文本行读取surname = list[1]
,我的新文本行将显示为Mildred Bush 45 65 45 67 65
。
错误发生在第7行Bush, Mildred: Final score is x.xx
我的代码:
surname = list[1];
它所说的public void splitTest()
{
String forename, surname, tempStr, InputFileName, OutputFileName;
tempStr = "";
String[] list = new String[6];
list = tempStr.split(" ");
forename = list[0];
surname = list[1];
int[] scores = new int[5];
scores[0] = Integer.parseInt(list[2]);
scores[1] = Integer.parseInt(list[3]);
scores[2] = Integer.parseInt(list[4]);
scores[3] = Integer.parseInt(list[5]);
scores[4] = Integer.parseInt(list[6]);
FileReader fileReader = null;
BufferedReader bufferedReader = null;
FileOutputStream outputStream = null;
PrintWriter printWriter = null;
clrscr();
System.out.println("Please enter the name of the file that is to be READ (e.g. details.txt) : ");
InputFileName = Genio.getString();
System.out.println("Please enter the name of the file that is to be WRITTEN TO (e.g. newDetails.txt) : ");
OutputFileName = Genio.getString();
try {
fileReader = new FileReader(InputFileName);
bufferedReader = new BufferedReader(fileReader);
outputStream = new FileOutputStream(OutputFileName);
printWriter = new PrintWriter(outputStream);
tempStr = bufferedReader.readLine();
while (tempStr != null) {
System.out.println(tempStr);
printWriter.write(tempStr+"\n");
tempStr = bufferedReader.readLine();
}
System.out.println("\n\nYOUR NEW FILE DATA IS DISPLAYED ABOVE!\n\n");
pressKey();
bufferedReader.close();
printWriter.close();
} catch (IOException e) {
System.out.println("Sorry, there has been a problem opening or reading from the file");
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
System.out.println("An error occurred when attempting to close the file");
}
}
if(printWriter != null) {
printWriter.close();
}
}
}
,这是一个处理用户输入的类。
答案 0 :(得分:3)
使用
初始化list
数组
list = tempStr.split(" ");
该数组的大小可以是任何值。这取决于tempStr
中的空格数。
在访问其元素之前,您必须检查list
的长度。
如果您希望输入包含一定数量的参数,请添加一个检查:
list = tempStr.split(" ");
int[] scores = new int[5];
if (list.length > 6) {
forename = list[0];
surname = list[1];
scores[0] = Integer.parseInt(list[2]);
scores[1] = Integer.parseInt(list[3]);
scores[2] = Integer.parseInt(list[4]);
scores[3] = Integer.parseInt(list[5]);
scores[4] = Integer.parseInt(list[6]);
}
这可以防止异常。当然,您必须决定如何处理条件为假的情况。
编辑:
tempStr = "";
这意味着list
中只有一个元素。我假设您打算在此变量中加入一些实际值。