java - 查找字符串中多次出现的单词并存储各自的起始索引

标签 java string split find-occurrences

背景

我有一个文本字符串和一个包含我正在查找的单词的哈希集。

给定

String doc = "one of the car and bike and one of those";
String [] testDoc = doc.split("\\s+");
HashSet<String> setW = new HashSet<>();
setW.add("and");
setW.add("of");
setW.add("one");

目标

目标是扫描字符串,每次遇到哈希集中的单词时,我们都会存储该单词和起始索引的位置。

在上述情况下,我们应该能够存储以下内容

one-->0 

of-->4 

and-->15 

and-->24, 

one-->28, 

of-->32

` 尝试

//create hashmap
for(int i = 0; i<testDoc.length; i++){
    if(setW.contains(testDoc[i])) {
        doc.indexOf(testDoc[i]);
       //add string and its index to hashmap
    }

这就是我到目前为止所想到的,唯一的问题是indexOf方法只查看单词的第一次出现,所以我不知道该怎么做。如果我在扫描每个单词后继续修剪字符串,那么我将无法获取原始字符串中单词的索引位置。

我希望在这里得到一些意见。

最佳答案

有一个重载版本的indexOf()它需要一个索引来开始搜索。您可以使用它重复搜索相同的字符串,直到到达末尾。

请注意,您可以删除对 contains() 的测试,这样就不会搜索该字符串两次。

关于java - 查找字符串中多次出现的单词并存储各自的起始索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56469180/

相关文章:

mysql - 如何删除Mysql列中的多个字符串

c - 读取数百行后程序中断

Php分割字符串转义配额

java - 在 Java 字符串中使用 split

java - JDBC 中的事务状态

java - Spark 因 SerializedLambda 的 ClassNotFoundException 失败

c# - 在文本文件中搜索字符串的更快方法

java - 在 Java 中,有没有办法编写字符串文字而不必转义引号?

java - 调试错误 : Exception is never thrown in body of corresponding try statement

windows - 如何在 Windows 批处理文件中按空格拆分字符串?