繁体   English   中英

如何从Java中的输入文本文件确定2D文本块?

[英]How could I determine 2D blocks of text from an input text file in Java?

为计算机提供了一个文本文件来解决难题。 在给定的文本文件中,说

  b   bab    abba
 aa     a    baba    b     

文本的最大块是“目标拼图”,其中拼图的所有部分都由空格隔开。 在最终结果中,该算法应该能够解析“目标”难题中的“碎片”或难题。 最大的文字块隐含地是目标难题。

考虑到它们跨越多行,我该如何解析这些片断并感到困惑? 可以很容易地在一行上解析分离出的块,但是如何将每一行的已解析块连接到一个“块”对象或类似的对象中。 现在,我正在使用2D阵列,对于此特定解析问题的任何帮助将不胜感激。

我认为,对我来说,第一步是将确切的表示形式转换为易于操作的结构。 我同意,多维数组似乎是最合理的模型,因为它非常适合这个概念。

您需要将每个字符读入一个新的char[] 您可以使用此问题中的代码来完成此操作 那是您的第一步。 将每个char放入一个数组,并将每个数组放入一个char[][]

第二步是接近度检查。 让我们看看一些可能性。

---1---1---11
---1-------11

因此,您知道可以在这里访问每个成员。 我想不出一种比O(n^2)更好的方法来检查每个元素。 不好,但这是您可以继续发展的东西。

  • 经过一行直到您到达的值不是空格。
  • 从这一点开始,您将在同一行上找到所有内容。 这意味着增加当前索引,直到您击中更多空白或数组末尾为止。
  • 接下来是找出下面的内容。 您现在知道值在哪里开始结束 因此,您每次需要在多维数组中向下移动时,都需要返回start索引和finish索引之间进行检查。
  • 对于您击中的每个值,增加一些全局指针。

按照上面的示例,您可以..

---1---1---11
   ^-----------------Found a character. Increment count.

---1---1---11
    ^----------------Only whitespace next to it. Stop looking.

---1---1---11
---1---1---11
   ^-----------------Found a character below. Increment count.

---1---1---11
---1---1---11
xxxxxxxxxxxxx
   ^-----------------We're at the end. 

---1---1---11 
    ^----------------There was no value after it. Search is complete.

Total Count = 2.

然后,您将转到下一个。 现在,为了给出一些完整的示例,我将做最后一个示例,向您展示正在使用的算法。

---1---1---11
           ^---------Found a value that isn't whitespace. Increment count.

---1---1---11
            ^--------Found another value. Increment count.

---1---1---11
             ^-------At the end of the array. Stop looking.

---1---1---11
---1-------11
           ^---------Found a value. Increment count.

---1---1---11
---1-------11
xxxxxxxxxxxxx
           ^---------At the end. Stop looking.


---1---1---11
---1-------11
            ^--------Found a value. Increment count.

---1---1---11
---1---1---11
xxxxxxxxxxxxx
            ^--------At the end. Stop looking.


---1---1---11
             ^-------At the end of the top array. Finished search.

Total Count = 4.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM