【问题标题】:Read Text Line by Line in Java [closed]在Java中逐行读取文本[关闭]
【发布时间】:2021-05-26 22:22:10
【问题描述】:

我正在尝试使用 Scanner 读取文本文件并将文本拆分为 Space 并将其存储在数组中,但它不会读取整个文本,但实际上会读取最后两行。 我正在尝试阅读这些行:

学生 [姓名= Uzair Siddiqui,卷号 = 1234 地址= 卡拉奇,电话号码= 03312345,专业= cs 课程= [DM,OOP],GPA= 3.8]
学生 [name= Zaid Haris,卷号 = 2323 地址= kaaaa,phoneNumber= 01315121,专业= dm Courses= [JAVA, CAL],GPA= 3.8]

我在“”处拆分数据并将其存储在一个字符串数组中,但它只存储最后一行,即

学生 [姓名= Zaid Haris,卷号 = 2323 地址= kaaaa,电话号码= 01315121,专业= dm 课程= [JAVA,CAL],GPA= 3.8]

我的代码是

String [] strArr=new String[500];
        try {
            FileInputStream myObj = new FileInputStream("allStudents.txt");
            Scanner myReader = new Scanner(myObj);


            while (myReader.hasNextLine()) {
                String data = myReader.nextLine();
                strArr=data.split(" ");
            }
            myReader.close();
        } catch (Exception e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }

尽快寻找答案。谢谢!

【问题讨论】:

  • 输入的格式是什么?每个学生都在新线上吗?举例说明您的理想结果是什么
  • strArr = 显然并不意味着“追加”,这是对= 可能做的事情的一种相当奇怪的解释。不要使用数组,那不是它们的用途。使用List<String>list.addAll(data.split(" ")); 将是一个不错的开始。您还需要在此处应用 try-with-resources,这是在 java 中读取文件的一种非常过时的方式。如果文件的编码不正确,它也会失败,因为您没有指定它。
  • @StarshipladDev 我想通过在空格处拆分来将所有文件文本存储在一个数组中,但它只存储最后几行。
  • @rzwitserloot 感谢您的帮助。我会试试的。
  • 您好 Uzair,考虑一下:您正在将 strArr 变量初始化为固定长度的列表。但是,您并没有使用刚刚分配的空间:strArr 设置为等于 data.split,这是您读取的最后一行。在每次迭代中,您只需将读取的最后一行存储到 strArr 变量中。

标签: java inputstream filereader file-handling readfile


【解决方案1】:

问题是您每次都将“StrArr”替换为最新读取的行。

尝试使用 2D 数组,其中第一个索引用于每一行,第二个索引用于该行中由 " " 分割的每个单词

示例

String[][] strArr=new String[numberOfLines][];
        try {
            FileInputStream myObj = new FileInputStream("allStudents.txt");
            Scanner myReader = new Scanner(myObj);
            int count=0;
            while (myReader.hasNextLine()) {
                String data = myReader.nextLine(); //YOUR ISSUE WAS HERE AND LINE BELOW
                strArr[count]=data.split(" ");
                count++;
            }
            myReader.close();
        } catch (Exception e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }

【讨论】:

  • 它工作得很好。非常感谢您的帮助!
  • 第二维不需要初始化为500。另外,可以考虑使用try-with-resources。
  • -UzairSiddiqui 你可以投票并标记为已回答吗?我的广告少了 10 个代表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2012-10-22
  • 1970-01-01
相关资源
最近更新 更多