为了账号安全,请及时绑定邮箱和手机立即绑定

如何从句子中的arraylist中获取任何单词第一次出现的索引

如何从句子中的arraylist中获取任何单词第一次出现的索引

Smart猫小萌 2022-06-23 10:39:48
我想从句子中获取单词的索引。但在这里我不想检查一个特定的词。我有单词列表,我想从句子中可用的列表中获取第一次出现的任何单词的索引。我希望索引从结果索引开始获取句子的子字符串。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");  }我尝试编写一些代码,但无法弄清楚如何获取 String 的索引"rahul"。输入:句子:hii rahul ,nice to meet you .How are you?搜索词的 ArrayList:["meet","are","rahul"]预期输出: 索引为 4(rahul句子中的第一个)
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可以使用String.indexOf(String)来确定子字符串的起始位置:


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);

}


查看完整回答
反对 回复 2022-06-23
?
largeQ

TA贡献2039条经验 获得超8个赞

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(meet|are|rahul),因此找不到“软件”。或者进行不区分大小写的搜索。


查看完整回答
反对 回复 2022-06-23
?
MYYA

TA贡献1868条经验 获得超4个赞

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


如果你只使用containsor indexOf,它可能会给出错误的答案。例如...


        String search = "Doctor Smith went gardening and then went to the cinema on Tuesday";

        List<String> words = Arrays.asList("then", "to", "went");

如果使用,这将给出错误的答案,indexOf因为字符序列 '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);

        }

    }

}



查看完整回答
反对 回复 2022-06-23
  • 3 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号