当前位置: 首页 > 知识库问答 >
问题:

如何从数组列表中获取任何单词在句子中首次出现的索引

岑炯
2023-03-14

我想从这个句子中得到单词的索引。但在这里,我不想检查一个特定的单词。我有一个单词列表,我想从列表中获得句子中任何单词第一次出现的索引
我希望索引从结果索引开始,获取句子的子字符串。

String sentence = "hii rahul ,nice to meet you .How are you?";
ArrayList search = new ArrayList();
search.add("are");
search.add("rahul");
search.add("meet");
for(int i=0;i<search.size();i++)
{
  if (sentence.contains(search.get(i))) {
    System.out.println("I found the keyword");
  } else {
    System.out.println("not found");
  }

我试着编写一些代码,但不知道如何获取字符串的索引。

输入:
句子:hii rahul,很高兴见到你。你好吗
搜索词的数组列表:[“meet”,“are”,“rahul”]

预期输出:索引为4(因为rahul在句子中排在第一位)

共有3个答案

叶德运
2023-03-14

您可能需要将字符串拆分为单词列表。

如果只使用contains(包含)或indexOf(索引),则可能会给出错误的答案。例如

        String search = "Doctor Smith went gardening and then went to the cinema on Tuesday";
        List<String> words = Arrays.asList("then", "to", "went");

如果使用索引of,这将给出错误的答案,因为字符序列“to”出现在单词“Doctor”中。

这会匹配整个单词(区分大小写)。。。

import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;

public class FindWord {

    public static void main(String[] args) {
        String search = "Doctor Smith went gardening then went to the cinema on Tuesday";
        List<String> words = Arrays.asList("then", "to", "went");

        int index = 0;
        int result = -1;
        String match = null;

        StringTokenizer tokenizer = new StringTokenizer(search, " ", true);

        while(result < 0 && tokenizer.hasMoreElements()) {
            String next = tokenizer.nextToken();

            if(words.contains(next)) {
                result = index;
                match = next;
            } else {
                index += next.length();
            }
        }

        if(match == null) {
            System.out.println("Not found.");
        } else {
            System.out.println("Found '" + match + "' at index: " + result);
        }
    }
}
柯翔
2023-03-14
Matcher m = Pattern.compile("(meet|are|rahul)").matcher(searchText);
if (m.find()) {
    System.out.printf("Found '%s' at position %d%n",
        m.group(), m.start());
}

如果要从列表开始:

List<String> keywords = Arrays.asList("meet","are","rahul");
String pattern = keywords.stream().collect(Collectors.joining("|", "(", ")"));

正则表达式搜索速度较慢,但可以添加单词边界\\b(met|are|rahul),因此找不到“软件”。或者进行不区分大小写的搜索。

呼延聪
2023-03-14

您可以使用字符串。索引(字符串)确定子字符串的起始位置:

Integer lowestIndex = null;
for(String searchWord : search) {  
    int index = sentence.indexOf(searchWord);
    // update the result if the searchWord occurs at a lower position
    if (index >= 0 && (lowestIndex == null || lowestIndex > index)) {
            lowestIndex = index;
        }
    } 
}
if (lowestIndex == null) {
    System.out.println("None of the keywords were found");
}
else {
    System.out.printf("First keyword at %s%n", lowestIndex);
}
 类似资料:
  • 我有一个程序,其中有一个名称列表,输出说明名称出现了多少次,以及单词出现在哪一行。现在,如果一个名字出现两次,它只输出第一个出现的单词的行号。如果名字出现了不止一次,我怎么能让它说出名字在哪一行呢?

  • 我实际上是一个新手到Java,并试图做一个小项目。所以,在我的项目中,我想让用户输入一个句子,我想让程序在句子中搜索特定的单词,并基于此给出输出。我使用NetBeans开发我的应用程序。 我的代码是这样的 我知道这段代码没有意义,也不会运行,但我这样说是为了让人们对我试图实现的目标有一个大致的了解。 请帮帮我.

  • 问题内容: 我有并想要一些函数,调用的结果是新数组。 问题答案: 看一眼

  • 我想计算一下给定句子中出现了多少个单词。我使用的是C编程语言。它不能计算最后一个字。在给定的字符串中,它计算每个单词发生的次数。如果有像这样的句子,那么程序应该算。但在我的情况下,它不算作。而不是计算,然后: 我的代码:

  • 问题内容: 我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下: 这是我的搜索方法。我不想寻找特定的词组,但是其中的任何单词。用于搜索的分析器与用于索引的分析器相同。 我是Lucene的新手。有人可以帮我吗? 问题答案: 使用会精确地尝试将短语“单词列表”与短语坡度0匹配。 如果要匹配单词列表中的 任何 术语,可以使用: 或者,您也可以使用,以便您可以要求查询词的数量的

  • 例如,给定和board= 并遇到以下实现: 在中,为特定单词设置trie后,它执行。在中,它检查。 但是,为什么是直到找到单词中的最后一个字符,那么就不再是了呢? 不依赖于任何索引,它与对象本身直接相关,因此应该可以在任何时候访问,但我只是不明白为什么直到找到该单词的最后一个字符。 谢谢。