2015-05-26 33 views
2

我有一个树状图如何匹配树映射值其开头或等于搜索字符串

TreeMap<String,HashSet<String>> kewordVideo = new TreeMap<String,HashSet<String>>(); 

String searchString; 

我想打印树图与开始的所有值或等于searchString的

例如树地图具有以下键值对

v1 abc 
v2 abd 
v3 bcd 
v4 bad 

和搜索字符串是

所以输出应该是

v1 v2 

因为他们都与V4不应该是输出的一部分,因为它不带有开始或等于一个 这里开始完整的代码。无输出来了后,我进入搜索键

package cultureMachine; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.HashSet; 
import java.util.Map; 
import java.util.Map.Entry; 
import java.util.Set; 
import java.util.TreeMap; 

public class CultureMachineAssignment { 

TreeMap<String,HashSet<String>> kewordVideo = new  TreeMap<String,HashSet<String>>(); 
TreeMap<String,HashSet<String>> videoKeyword = new TreeMap<String,HashSet<String>>(); 
TreeMap<String,Integer> keywordLength = new TreeMap<String,Integer>(); 

    public static void main(String args[]) throws IOException { 

    CultureMachineAssignment obj1 = new CultureMachineAssignment(); 


    Integer previousVal=0; 
    InputStreamReader ip = new InputStreamReader(System.in); 
    BufferedReader br = new BufferedReader(ip); 

    for(int i=0;i<5;i++){ 
     System.out.println("Enter Video name"); 
     String video =br.readLine(); 


     if(!obj1.videoKeyword.containsKey(video)){ 
      obj1.videoKeyword.put(video,new HashSet<String>()); 
     } 

     System.out.println("Enter keywords for video"); 
     String keyword =br.readLine(); 

     if(!obj1.keywordLength.containsKey(video)) 
      obj1.keywordLength.put(video, 0); 

     if((obj1.keywordLength.get(video)+keyword.length())<5){ 
      obj1.videoKeyword.get(video).add(keyword); 
      previousVal=obj1.keywordLength.get(video); 
      obj1.keywordLength.put(video, previousVal+keyword.length()); 
     } 
     else{ 
      System.out.println("Maximum length exceeded for video "+ video); 
      break; 
     } 
     if(!obj1.kewordVideo.containsKey(keyword)){ 
      obj1.kewordVideo.put(keyword,new HashSet<String>()); 
     } 
     obj1.kewordVideo.get(keyword).add(video); 


    } 
    for(Map.Entry m:obj1.videoKeyword.entrySet()){ 
     System.out.println(m.getKey()+" "+m.getValue()); 
    } 
    System.out.println("Enter keyword to search video"); 
    String searchKey = br.readLine(); 
    for(Entry<String,HashSet<String>> entry : obj1.kewordVideo.entrySet()){  
        if(entry.getValue().contains(searchKey)) 
        System.out.println(entry.getKey()); 

       } 
     } 
} 
+0

您忘记解释阻止您编写自己的解决方案的问题。你面临的问题是什么?你知道如何迭代映射键值对吗? – Pshemo

+0

是的我知道我想用正则表达式'if(obj1.kewordVideo.containsKey(searchKey))来做这个'如果搜索字符串完全匹配如何做以 –

+0

开头,你可以添加到你的问题代码中使用?你也可以解释为什么你认为你需要正则表达式(你看过'从字符串startsWith'方法)? – Pshemo

回答

3

这应该工作:

TreeMap<String,HashSet<String>> videoKeyword = new TreeMap<String,HashSet<String>>(); 
videoKeyword.put("v1", new HashSet<String>(Arrays.asList("abc"))); 
videoKeyword.put("v2", new HashSet<String>(Arrays.asList("abd"))); 
videoKeyword.put("v3", new HashSet<String>(Arrays.asList("bcd"))); 
videoKeyword.put("v4", new HashSet<String>(Arrays.asList("bad"))); 

String searchString = "a"; 

for (Entry<String, HashSet<String>> entry : videoKeyword.entrySet()) { 
    for (String s : entry.getValue()) { 
     if (s.startsWith(searchString)) { 
      System.out.println(entry.getKey()); 
      break; 
     } 
    } 
} 

输出:

v1 
v2 
+0

for for(String s:entry){'我得到下面的错误'只能迭代一个数组或java.lang.Iterable的实例'。我们也可以使用HashSet,因为我正在使用TreeMap –

+0

我修复了这个问题。 'HashSet'实际上是'entry.getValue()'。 –

+1

是否有必要遍历每个哈希集的整个字符串集? – adam5990

0

我想你可以通过遍历您的项目在设置这样做树图和使用哈希集的contains方法测试您的搜索字符串,以确定哪些键具有包含您的搜索词的值。

for(Entry<String,HashSet<String>> entry : kewordVideo.entrySet()){  
    if(entry.getValue.contains(searchString){ 
    //Do something with entry.getKey(), ie add to a list or output to console 
    } 
} 
+0

这不显示输出我试图调试它也没有得到调试 –

相关问题