用Java标记字符串

时间:2011-04-01 13:53:55

标签: java

如何在java中标记字符串数组?

我想创建一个字符串数组并将它们标记为:

m funny
s funny 
t boring
k boring

然后,如果用户可以通过标记

来搜索它们
search : funny
::
m,s

4 个答案:

答案 0 :(得分:5)

// key is tag, value all the strings which have this tag.
HashMap<String, HashSet<String>> tags = new HashMap<String, HashSet<String>>();
// words that with the tag: funny
Set<String> words = tags.get("funny");

如果一个单词可以有多个标签,那么您可能有另一个地图:

// key is string, value all the tags for the string
HashMap<String, HashSet<String>> invertedTags = new HashMap<String, HashSet<String>>();
// tags of the word: "m"
Set<String> tags = invertedTags.get("m");

答案 1 :(得分:4)

我建议在字符串中使用Guava MultiMap个标签。这样,您可以通过单个查找获得具有给定标记的所有字符串。

MultiMap<String, String> tagStringMap = new MultiMap<String, String>();

// load up the tag to strings.
tagStringMap.put(tag1, string1);

// single lookup gets everything.
Collection<String> strings = tagStringMap.get(tag);

答案 2 :(得分:2)

创建HashMap以存储正向和反向映射。

HashMap<String,String> stringTags;
HashMap<String,ArrayList<String>> tagStrings;

然后你可以像这样添加映射:

public void tagString(String string, String tag) {
  this.stringTags.put(string, tag);
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null) {
    strings = new ArrayList<String>();
    this.tagStrings.put(tag, strings);
  }
  strings.add(string);
}

然后您可以这样访问:

private String getTag(String string) {
  return this.stringTags.get(string);
}

private String[] getStrings(String tag) {
  ArrayList<String> strings = this.tagStrings.get(tag);
  if (strings == null)
    return new String[0];
  return strings.toArray(new String[strings.size()]);
}

如果多个线程将访问此数据,请记住同步这些函数。

答案 3 :(得分:1)

使用Map

import java.util.*;

public class TestTaggedStrings {

   Map<String, String> taggedStrings = new HashMap<String, String>();

   public TestTaggedStrings() {
      taggedStrings.put("m", "funny");
      taggedStrings.put("s", "funny");
      taggedStrings.put("t", "boring");
      taggedStrings.put("k", "boring");
   }

   public static void main(String[] args) {
      TestTaggedStrings testStrings = new TestTaggedStrings();
      System.out.println(testStrings.search("funny"));
   }

   public List<String> search(String searchTerm) {
      List<String> matches = new ArrayList<String>();
      Set<String> keys = taggedStrings.keySet();
      for(String key : keys) {
         if(searchTerm.equals(taggedStrings.get(key))) {
            matches.add(key);
         }
      }
      return matches;
   }
}

测试:

$>javac TestTaggedStrings.java
$>java TestTaggedStrings
[s, m]