使用扫描仪读取文件但将空白行跳过到二维数组中

2024-03-14

我正在努力使用扫描仪类来读取文本文件,同时跳过空白行。

有什么建议么?

   Scanner sc = new Scanner(new BufferedReader(new FileReader("training2.txt")));

  trainingData = new double[48][2];
  while(sc.hasNextLine()) {
     for (int i=0; i<trainingData.length; i++) {

        String[] line = sc.nextLine().trim().split(" ");
        if(line.length==0) 
        {
            sc.nextLine();
        }else{
        for (int j=0; j<line.length; j++) {
           trainingData[i][j] = Double.parseDouble(line[j]);
        }
        }
     }
  }

  if(sc.hasNextLine())
  {
      sc.nextLine();
  }
  sc.close();

我目前正在尝试让它像这样工作。但它不起作用

Scanner sc = new Scanner(new BufferedReader(new FileReader("training.txt")));

  trainingData = new double[48][2];
  while(sc.hasNextLine()) {
      String line = sc.nextLine().trim();
      if(line.length()!=0)
      {
        for (int i=0; i<trainingData.length; i++) {
        String[] line2 = sc.nextLine().trim().split(" ");
        for (int j=0; j<line2.length; j++) {
           trainingData[i][j] = Double.parseDouble(line2[j]);
        }
     }
      }

  }
  return trainingData;

while(sc.hasNextLine()) {
    for (int i=0; i<trainingData.length; i++) {
        String[] line = sc.nextLine().trim().split(" ");

您不能只检查扫描仪一次以查看它是否有数据,然后使用循环来读取数据行。您不能仅仅因为定义数组来保存 48 行数据就假设您有 48 行数据。

您需要回到基础知识并学习如何一次一行地从文件中读取数据,然后处理该数据。

这是一个帮助您入门的简单示例:

import java.util.*;

public class ScannerTest2
{
    public static void main(String args[])
        throws Exception
    {
        String data = "1 2\n\n3 4\n\n5 6\n7 8";

            // First attempt

        System.out.println("Display All Lines");
        Scanner s = new Scanner( data );

        while (s.hasNextLine())
        {
            String line = s.nextLine();
            System.out.println( line );
        }

            // Second attempt

        System.out.println("Display non blank lines");
        s = new Scanner( data );

        while (s.hasNextLine())
        {
            String line = s.nextLine();

            if (line.length() != 0)
            {
                System.out.println( line );
            }
        }

            // Final attempt    

        String[][] values = new String[5][2];
        int row = 0;

        System.out.println("Add data to 2D Array");
        s = new Scanner( data );

        while (s.hasNextLine())
        {
            String line = s.nextLine();

            if (line.length() != 0)
            {
                String[] digits = line.split(" ");
                values[row] = digits;
                row++;
            }
        }

        for (int i = 0; i < values.length; i++)
            System.out.println( Arrays.asList(values[i]) );
    }
}

该示例使用 String 变量来模拟文件中的数据。

第一个代码块是如何简单地从文件中读取所有数据行。逻辑很简单:

  1. 调用hasNextLine()方法所以看看是否有数据
  2. 调用nextLine()获取数据行的方法
  3. 显示读取到的数据
  4. 重复步骤1-3,直到没有数据为止。

然后下一个代码块只需添加一个“if 条件”,以便仅显示非空白数据。

最后,第三个代码块更接近您想要的。当它读取每一行数据时,它将数据分割成一个数组,然后将该数组添加到二维数组中。

这是您需要更改的代码部分。在将字符串数组添加到二维数组之前,您需要将其转换为双精度数组。因此,首先更改此代码以使其正常工作。然后,一旦您理解了这个概念,就可以对您的实际应用程序进行必要的更改。

请注意我的代码中最后一行如何显示 [null, null]。这就是为什么使用数组不是一个好主意,因为你永远不知道数组应该有多大。如果少于 5 个,则会得到空值。如果超过 5 个,您将收到越界异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用扫描仪读取文件但将空白行跳过到二维数组中 的相关文章

  • 如何在 JPanel 上绘制后重新绘制它?

    我有一个继承自 JPanel 的组件 我在上面绘制了一个网格 现在我有一个 JComboBox 我希望用户能够在此处选择网格大小 然后按按钮进行网格更改 重新绘制网格 问题是它绘制了初始网格 但是一旦用户从 JComboBox 选择网格大小
  • Restlet 和 MULTIPART_FORM_DATA 或通过 Restlet 将文件放在 Google App Engine 上的其他方式

    我尝试通过 Restlet 接收文件 但只获得完整的 MULTIPART FORM DATA 如何提取我的特定文件 我找到了一些代码块 但它们的类型不可用 RESTlet 如何处理多部分 表单数据请求 https stackoverflow
  • Hibernate 自定义架构创建

  • Antlr 处理异常

    我使用 Antlr 3 和 AST 树开发了一个复杂的语法 ANTLR 生成词法分析器和解析器 问题是 例如 当用户输入无效的语法时 该语法需要 用户没有输入此内容 然后在我的 Eclipse IDE 中出现以下异常 line 1 24 m
  • 谁能解释一下 servlet 映射吗?

    我正在尝试使用 SpringMVC 编写一个 Web 应用程序 通常我只是将一些虚构的文件扩展名映射到 Spring 的前端控制器并快乐地生活 但这次我要使用类似 REST 的 URL 没有文件扩展名 将我的上下文路径下的所有内容映射到前端
  • 如何用Java创建图像

    比如说在我的程序中 我有这个paint 方法 我的愿望是创建所绘制的矩形的图像 使用 for 循环 我尝试了下面的方法 它确实给了我那些矩形 蓝色 但背景是全黑的 当我运行程序而不创建图像 仅在 JFrame 上绘制矩形时 背景为白色 我怎
  • 使用 Gson 序列化时如何公开类名

    我的场景非常复杂 但总结如下 我试图了解编译器的源代码 并了解每个 AST 节点代表什么 我正在生成不同程序的 AST 的 JSON 序列化 然后检查可视化的 JSON 输出 它工作得很好 除了一个问题是在 Gson 中生成的 JSON 数
  • Selenium - 保存网站,包括所有图像、css、dom

    我想使用 firefox 或 chrome 访问带有 selenium 的页面 当页面加载时 我想从页面下载所有图像 css dom 我想存储每张图像 就像我在其中找到它们一样 chrome gt Tools gt Development
  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/LabWebServletHibernate]]

    当使用 eclipse neon 1 在 tomcat 8 上运行应用程序时 我收到此错误 它使用 spring 4 3 3 hibernate 5 2 4 和 maven 嚴重 A child container failed durin
  • 文件保存在文件系统中 VS 保存在数据库中

    我正在设计一个 servlet 或 Struts2 中的操作 用于文件 图像 文档等 下载 但我想知道哪种更好的方法可以将文件保留在文件系统和数据库中 只需保留文件的路径或将文件保留在数据库中 如 BLOB 我知道当我查询数据库时 哪里的
  • 从 org.w3c.dom.Node 获取 Xpath

    我可以从 org w3c dom Node 获取完整的 xpath 吗 假设当前节点指向 xml 文档中间的某个位置 我想提取该元素的 xpath 我正在寻找的输出 xpath 是 parent child1 chiild2 child3
  • 如何将 wsdl 内部架构设置为 Jaxb2Marshaller 以验证我所做的每篇文章?

    我正在使用 SOAP Web 服务 在调用它之前我必须验证每个 xml 帖子 所以我正在使用 The CXF codegen 插件生成POJO树结构 第三部分 wsdl xxxx soap service wsdl 一个类实现Web服务网关
  • 在 javafx 中注册鼠标处理程序,但处理程序不是内联的

    我有一个 JavaFX 应用程序变得有点大 我想保持代码的可读性 我有一个折线图 我希望内置缩放功能 该功能在单击鼠标时发生 我知道我需要向图表注册鼠标侦听器 我无法从 Oracle 示例中弄清楚什么 即如下所示 http docs ora
  • 使用antlr4获取预处理器行并解析C代码

    我正在使用 Antlr4 来解析 C 代码 并使用以下语法来解析 链接到 C g4 https github com antlr grammars v4 blob master c C g4 上面的语法默认不提供任何解析规则来获取预处理器语
  • 在 Java 中打开现有文件并关闭它。

    是否可以在java中打开一个文件附加数据并关闭多次 例如 psuedocode class variable declaration FileWriter writer1 new FileWriter filename fn1 writer
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • 为什么 HttpServletRequest 输入流为空?

    我有这段代码 我从请求输入流读取输入并使用 JacksonMapper 转换为 POJO 它在具有 guice 支持的 jetty 7 容器中运行 Override protected void doPost HttpServletRequ
  • 按字母顺序对对象的 ArrayList 进行排序

    我必须创建一个方法来排序数组列表根据电子邮件按字母顺序排列对象 然后打印排序后的数组 我在排序时遇到麻烦的部分 我已经研究过并尝试使用Collections sort vehiclearray 但这对我不起作用 我是因为我需要一个叫做比较器

随机推荐