匹配字符串以使用Java

时间:2018-12-06 16:49:39

标签: java javafx jfoenix

我正在使用javafx中的TextArea并尝试使用JFXHighlighter(它只是用文本区域上方的框突出显示文本。这是jfoenix库中的util)。 JFXHighlighter不执行我希望它执行的操作,因为它具有受限和封闭的api智慧,因此具有可单击的文本。我计划发出一个请求以使其对API更加友好,但此问题需要首先处理:

因此,我正在通过修改实现JFXHighlighter的复本。添加可点击性是容易的部分,并且已经完成并处理了,困难的部分是荧光笔中已经存在的错误。

TextArea的工作方式是您可以为渲染的每条物理线获取Text对象; JFXHighlighter使用此功能获取每一行文本的物理边界,并分别查找该行文本中的所有匹配字符串。因此,问题在于JFXHighlighter无法突出显示换行的长文本,因为每一行都是单独的对象。荧光笔用于单词搜索而不是句子搜索。

因此,本质上需要做的是将查询字符串的每个部分或它剩下的任何部分与它可以定位的位置进行匹配,而与起始索引无关,也永远不会出现在任何行中,而是在之后的相邻行中进行匹配

我的意思是,如果文本区域显示为自动换行:

The big brown fox    <--
jumps over the lazy  <----
dog. But
The big brown fox    <--
also jumped over
a yellow dog
which also 
jumps over the lazy  <----
dog

如果我搜索“大棕狐跳过懒惰的狗”,则我的意思显然是第一句话,但是给定的问题变得更加复杂,因为它要进行字符串搜索,因为您要拒绝第二条。大棕狐狸”和第二个“跳过懒惰”也突出显示。我不是要突出显示文本的大块的位置,而是要突出显示 wholest 文本的 whole 句子。分隔。

我的尝试是在一个while循环中缓慢地修剪搜索查询并进行搜索,然后从另一端进行修剪并进行搜索,但这并不能解决上面提到的问题,并且会带来自己的问题。

JFXHighlighter查找文本的方法是通过获取每行中搜索到的字符串的开始索引,如果索引为-1,则跳过它。如果没有,请突出显示找到的任何内容。

那我该如何解决呢?

获取每行边界框的代码位于

方法中

private ArrayList<Bounds> getMatchingBounds(String query, Text text)

这是原始的JFXHighlighter:https://github.com/jfoenixadmin/JFoenix/blob/master/jfoenix/src/main/java/com/jfoenix/utils/JFXHighlighter.java

这是我的修改,目前无法正确突出显示。

垃圾箱:https://hasteb.in/dahofeku.java

pastebin:https://pastebin.com/VcitqPL1

最后:这是我的解决方案当前的样子,它试图在一次搜索中突出显示整个lorem ipsum文本。 (结果是理想情况下的FAR,我知道我的解决方案不是解决此问题的最佳方法,但我想不出更好的方法。)

Output

0 个答案:

没有答案