【问题标题】:How do you read text from a JTextArea one line at a time?您如何一次从 JTextArea 中读取一行文本?
【发布时间】:2021-05-21 01:31:00
【问题描述】:

您如何一次从JTextArea 读取文本一行?

我只能在文档中找到JTextArea.getText(<no parameters>) 函数,但没有关于基于行号的阅读。我可以获得给定行的开头和结尾的索引,以及总行数,但我不知道如何一次提取一行数据。

【问题讨论】:

  • 如果文本在 JTextArea 中,那么它已经在内存中。你所说的“嘶嘶作响”是什么意思?
  • 告诉我们这些数据以及您需要如何处理它;也许我们可以帮助您理解 StreamBufferedReader 文档。同时,您可能想尝试this section of the Java Tutorials 以快速了解流。
  • 除了 Kevin Anderson 链接的教程之外,the package documentation 提供了更一般的概述(而类文档更具体)。一般来说,我不理解您对文档的问题。如果您更喜欢短而草率,那么互联网上有很多选择。
  • 所以如果我可以逐行处理它,那么我会很高兴, - 所以你可以逐行读取数据。我不明白这个问题。 与 BufferedReader 结合 - 您只需要一个 FileReader 与 e BufferedReader 结合,然后使用 readLine(...) 方法。使用这些关键字搜索站点以查找示例。或者阅读你的教科书。文件 I/O 是任何教科书或基础教程中涵盖的主题。我建议您先学习基本的 I/O,然后再担心要复杂得多的流。
  • 这里still的根本问题是JTextArea的内容已经在内存中,所以“JTextArea读取文本而不加载将字符串写入内存”完全没有意义。 “3 MB 的原始文本”也不是一个令人印象深刻的数字(我们有 2021 年)。 String 可以毫无问题地包含十亿个字符,因此“一个字符串的输出包含太多字符”似乎是一个不成熟的假设。或发布代码以重现实际问题。

标签: java swing java-stream awt jtextarea


【解决方案1】:

我不明白这个问题。

为什么要将整个文件读入 JTextArea 中,然后读取文本区域中的文本并解析数据?

我的回答是你:

  1. 逐行读取CSV文件
  2. 然后您解析每一行以获得您需要的 3 列数据
  3. 如果您确实需要文本文件中的全部数据,那么您只需使用 JTextArea 的 append(...) 方法在读取时添加每一行数据。

JTextArea 的唯一输出是 JTextArea.getText()

如果您真的想从文本区域获取数据,请阅读 JTextArea API。以下方法可以帮助您:

  1. getText(...) 方法,你指定“偏移”和“长度”参数,这样你就可以得到一行文本
  2. getLines()为文本区的文本行数
  3. getLineStartOffset(...)getLineEndOffset(...)

所以现在您可以创建一个循环并获取每一行的文本。

【讨论】:

  • 所以有两件事:首先,为什么并不重要,不是吗?这不是代码审查。我只想知道如何在不破坏内存的情况下解决这个问题。哦,但第二个是我有时非常讨厌 Java 文档,因为 getText(int offset, int length) 与我认为存在的 getText() 方法相去甚远。感谢您让我知道我错过了!
  • 为什么并不重要,是吗? - 是的,因为当你问一个基本问题时,我们不知道问题是否是你缺乏对 Swing 的理解,因此您的方法是完全错误的。当有选择时,我们不想推广糟糕的设计。 ... 离...太远了 - 提示 - 如果您查看定义方法的JTextComponent API,这两个方法按字母顺序一起定义。只有当您查看方法的细节时才会将它们分开。
  • 我愿意承认在这种情况下我只是愚蠢,我处理这个话题很糟糕。在整个线程中,我唯一支持的是 Java 8 之前的文档比 Java 8 文档更容易理解。就是这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 2017-06-23
  • 2013-10-15
相关资源
最近更新 更多