【问题标题】:Java find partially matching string from listJava从列表中找到部分匹配的字符串
【发布时间】:2018-02-18 10:45:05
【问题描述】:

所以我使用 google camera api 为 OCR 创建了一个光学文本阅读器。从相机读取时,我想通过将读取的字符串与字符串列表匹配来过滤读取的字符串,如果读取的字符串部分匹配,则添加并显示列表中的项目。

除了过滤之外的一切都有效。

假设我有一个包含字符串的列表:

"BigSizeScrew   45**"

我要匹配读取的字符串:

"BigSizeScrew"

...到有数字的那个,然后也添加包含数字的字符串。

数字和星星是另一个原因,但必须保留,原因与问题无关。

tl;博士:

如何将一个字符串部分匹配到列表中的现有字符串?

我有以下内容,但它只搜索 100% 匹配的字符串,而不是如果检查的字符串包含读取字符串的子字符串。

for(int i =0;i<items.size();++i){
    if (list.contains(items.valueAt(i))) {
        TextBlock item = items.valueAt(i);
        stringBuilder.append(item.getValue());
        stringBuilder.append("\n");
    }
}

编辑:

该列表包含大约 200 个应该部分匹配的不同字符串。但都是一样的;部分匹配主字符串,但不匹配数字/星号。

【问题讨论】:

  • 在 java 中使用正则表达式。 java.util.regex
  • 我编辑了我的问题,我还能使用正则表达式吗?
  • 使用 indexOf() 方法。方法索引给出匹配字符串的索引。所以它的值大于-1,这意味着列表中存在seach字符串,您可以使用该字符串。

标签: java string substring partial


【解决方案1】:

我想你可能真的想要一个模糊句子匹配器。如果字母没有被光学元件捕获,您需要插入它们可能是什么。它进入了 NLP,但可能是正确的实施方式。

这里是 Smith-Waterman 维基百科的链接:https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm

Leveshtein 距离: https://en.wikipedia.org/wiki/Levenshtein_distance

有多种实现和库可以对读取的每个语句执行单个函数调用。 “本地句子对齐”是您要解决的问题。当涉及到屏幕阅读器预期人为错误和计算机错误时,忘记完全匹配。

【讨论】:

    【解决方案2】:

    您可以使用StringstartsWith 方法。如果ocrString 的值为BigSizeScrew 45**,则对要匹配的字符串和if(ocrString.startsWith(list.get(i)) then ... 的列表执行for 循环。

    【讨论】:

      【解决方案3】:

      使用 indexOf() 方法。方法索引给出匹配字符串的索引。所以它的值大于-1,这意味着seach字符串存在于列表中,您可以使用该字符串。

      【讨论】:

        【解决方案4】:

        你可以通过添加if 条件来做这样的事情:

        for(int i =0;i<items.size();++i){
            if (list.contains(items.valueAt(i))) {
                TextBlock item = items.valueAt(i);
                if(item.getValue().indexOf("Your String") > -1){
                  stringBuilder.append(item.getValue());
                  stringBuilder.append("\n");
                }
        
            }
        }
        

        使用您要搜索的字符串值代替your string

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-19
          • 2021-10-19
          • 2021-01-15
          • 2023-04-11
          • 1970-01-01
          • 2019-06-14
          • 2013-06-04
          • 1970-01-01
          相关资源
          最近更新 更多