java - contains() 匹配两个字符串的问题

标签 java string contains stringtokenizer

考虑到我们有 String包含三个单词,例如 "kids story book"我们将这些单词添加到 HashMap<String, Integer> 中而字符串部分包含单词,整数部分包含单词在字符串中的位置,即 1、2 和 3。还假设还有另一个相同类型的 HashMap这是由一系列分组的单词组成的字段。考虑每组单词都有一个共同的整数值作为 ID,表明它们属于同一组。我的目标是研究第二个 HashMap为了找到包含 kids 的任何字符串, storybook然后返回该单词及其唯一的整数 ID。这是我这样做的代码:

       String keyword="kids story book";
       static HashMap<String, Integer> tempp = new HashMap<>();
       static HashMap<String, Integer> stringToint = new HashMap<>();

                 //File is .txt file which contains some characters at each line
                 FileOutputStream Fcategorize=new FileOutputStream(File,true);

          FileReader inputFile = new FileReader(File);

          BufferedReader bufferReader = new BufferedReader(inputFile);

String line = bufferReader.readLine();


        for(int i = 0; line != null; i++){
        if( header(i).equals(line)){
            while( (line = bufferReader.readLine()) != null && ! Footer(i).equals( line ) )
               {


stringToint.put(line, i);
 }
              }

        }



    StringTokenizer start=new StringTokenizer(keyword);

    for(int i=-1; i<=start.countTokens();i++)
    {
        String temp=start.nextToken();
        tempp.put(temp, i);
    }

    Set<String> fkeys = stringToint.keySet();
    Iterator<String> fit = fkeys.iterator();


    Set<String> Lkeys =tempp.keySet();
    Iterator<String> sit = Lkeys.iterator();


    for(int i=0 ; i<tempp.size() ; i++)
    {
    nextToken=sit.next();
    while (fit.hasNext()){
                    String featurename = fit.next();

               if(featurename.contains(nextToken))
               {

              //Do something
               }

           }

    }

存在三个问题:一、第一个HashMap确实包含所有三个单词,但如果我使用控制台打印结果,它只会打印 HashMap 第一项的匹配项而不是全部三个(虽然这三个单词还有其他匹配项)。其次,正如代码中显而易见的那样,我从 i=-1 开始循环。那是因为如果我使用 i=0它不会将所有三个字符添加到 HashMap在这种情况下,字符串中单词的顺序将与 HashMap 中单词的顺序不同。最后,即使是 HashMap 第一个位置的项目,它甚至不返回 contains() 使用的所有匹配项。我手动检查了一下,发现有更多结果返回,但没有发生。

最佳答案

第三个问题是您没有在每个单词搜索时重置 fit 迭代器(在您的代码中,重置意味着初始化一个新迭代器)。 实际上,您每次都需要在 for 循环中初始化它

for(int i=0 ; i<tempp.size() ; i++)
{
    nextToken=sit.next();
    fit = fkeys.iterator();
    while (fit.hasNext()){
         ....

关于java - contains() 匹配两个字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460031/

相关文章:

java - 了解静态嵌套类类型定义中的原始通配符与无限通配符

java - 如何使 C++ 代码在 Java 组件上绘制

java字符串拆分正则表达式保留定界符

Java HashSet 包含返回 false,即使覆盖了 equals() 和 hashCode()

c# - Entity Framework : Precompiled Query for Enumerable. 包含

java - bean 属性的类型如何为空?

excel - 计算超过 255 个字符的函数 - Excel/VBA

C# 分配一个具有 x 个空格的变量

java - 如何修改 Java 9 的 ANT build.xml 中的 xjc block ?