1

我在编程作业上遇到问题。我需要从 txt 文件中读取数据并将其存储在并行数组中。txt 文件内容的格式如下:

Line1: Stringwith466numbers
Line2: String with a few words
Line3(int): 4
Line4: Stringwith4643numbers
Line5: String with another few words
Line6(int): 9

注意:“Line1:”、“Line2:”等仅用于显示目的,实际上不在 txt 文件中。

正如你所看到的,它以三个模式进行。txt 文件的每个条目是三行,两个字符串和一个 int。

我想将第一行读入一个数组,第二行读入另一个,第三行读入一个 int 数组。然后将第四行添加到第一个数组中,将第 5 行添加到第二个数组中,将第 6 行添加到第三个数组中。

我试图为此编写代码,但无法正常工作:

//Create Parallel Arrays
String[] moduleCodes = new String[3];
String[] moduleNames = new String[3];
int[] numberOfStudents = new int[3];

String fileName = "myfile.txt";


readFileContent(fileName, moduleCodes, moduleNames, numberOfStudents);

private static void readFileContent(String fileName, String[] moduleCodes, String[] moduleNames, int[] numberOfStudents) throws FileNotFoundException {

        // Create File Object 
        File file = new File(fileName);

        if (file.exists())
        {

            Scanner scan = new Scanner(file);
            int counter = 0;

            while(scan.hasNext())
            {


                String code = scan.next();
                String moduleName = scan.next();
                int totalPurchase = scan.nextInt();

                moduleCodes[counter] = code;
                moduleNames[counter] = moduleName;
                numberOfStudents[counter] = totalPurchase;

                counter++; 


            }

        }

    }

上面的代码不能正常工作。当我尝试打印出数组的一个元素时。它为字符串数组返回 null,为 int 数组返回 0,这表明读取数据的代码不起作用。

任何建议或指导都非常感谢,因为它在这一点上变得令人沮丧。

4

3 回答 3

1

只有 ' 被打印的事实null表明该文件不存在或为空(如果打印正确)。

进行一些检查以确保一切正常是个好主意:

if (!file.exists())
  System.out.println("The file " + fileName + " doesn't exist!");

或者您实际上可以跳过上面的内容,也可以在代码中取出该if (file.exists())行并让其FileNotFoundException抛出。

另一个问题是next按空格分割事物(默认情况下),问题是第二行有空格。

nextLine应该管用:

String code = scan.nextLine();
String moduleName = scan.nextLine();
int totalPurchase = Integer.parseInt(scan.nextLine());

或者,更改分隔符也应该有效:(使用您的代码)

scan.useDelimiter("\\r?\\n");
于 2013-04-18T15:29:10.110 回答
0

你正在阅读行,所以试试这个:

while(scan.hasNextLine()){
    String code = scan.nextLine();
    String moduleName = scan.nextLine();
    int totalPurchase = Integer.pasreInt(scan.nextLine().trim());

    moduleCodes[counter] = code;
    moduleNames[counter] = moduleName;
    numberOfStudents[counter] = totalPurchase;
    counter++; 
}
于 2013-04-18T15:28:21.383 回答
0
  String code = scan.nextLine();
  String moduleName = scan.nextLine();
  int totalPurchase = scan.nextInt();
  scan.nextLine()

这将在读取后将扫描仪移动到适当的位置int

于 2013-04-18T15:24:49.117 回答