计算字符串匹配数

时间:2014-03-14 17:35:55

标签: java regex string match

我想获得列表中最小的字符串匹配。虽然我这样做是成功的,但问题是我想要计算出多少匹配计数如此:

List<String> mylist=new LinkedList<String>();
Set<String> result=new LinkedHashSet<String>();
mylist.add("interpreter");
mylist.add("interprete");
mylist.add("interpret");

mylist.add("developed");
mylist.add("develops");
mylist.add("develop");
mylist.add("interpret");


String small="";
Collections.sort(mylist);
Collections.reverse(mylist);

for(int i=0;i<mylist.size();i++)
{

  small=mylist.get(i);

   for(int j=i;j<mylist.size();j++)
   {
    if(small.contains(mylist.get(j)))
    {
        small=mylist.get(j);
    }
   }
   result.add(small);
}
for (String string : result) {
   System.out.println(string);
}

这样输出应该是:

interpret=4
develop=4

我正在尝试使用以下代码时出现问题:

List<String> mylist=new LinkedList<String>();
Set<String> result=new LinkedHashSet<String>();
mylist.add("interpreter");
mylist.add("interprete");
mylist.add("interpret");

mylist.add("developed");
mylist.add("develops");
mylist.add("develop");
mylist.add("interpret");
mylist.add("crawler");
mylist.add("crawl");
mylist.add("mobile");
mylist.add("mob");
mylist.add("juni");
mylist.add("junis");

Collections.sort(mylist);
Collections.reverse(mylist);

String small="";
int c=0;

for(int i=0;i<mylist.size();i++)
{
    c+=1;
    small=mylist.get(i);
    for(int j=i;j<mylist.size();j++)
    {
        if(small.contains(mylist.get(j)))
            {
                small=mylist.get(j);
                c+=1;
            }
    }
    result.add(small);

}
for (String string : result) {
    System.out.println(string+"="+c);
}

请有人帮帮我!

3 个答案:

答案 0 :(得分:1)

将@ jambriz的答案放在你的代码中:

1.使用HashMap

HashMap<String, Integer> result= new LinkedHashMap<String, Integer>();

2.现在取代result.add(small);,仅当值为new或count小于先前计数时才在hashmap中添加值。另外,在此处设置c=0

if (!result.containsKey(small) || result.get(small) < c)
    result.put(small, c);
c = 0;

3.上次打印结果:

for (String key : result.keySet())
    System.out.println(key + ": " + result.get(key)); 

答案 1 :(得分:0)

好的,首先,您的第一个代码将打印

interpret
develop

因为你没有计算任何东西 它应该是

interpret=4
develop=3

反正。

第二个块只有一个计数器'c'。每个找到的单词应该有一个计数器。 我建议使用字符串和整数映射。当String不存在时,你放(小,1),当它存在时,你得到整数并添加一个。 如果有效,请告诉我们

(顺便说一下,代码中没有正则表达式,不应该这样标记)

答案 2 :(得分:0)

String[] smallestStrings; //this has "interpret", "develop"

int[] matches = new int[smallestStrings.length];

for (int i = 0; i < matches.length; i++) {
    matches[i] = 0;
    for (String s : mylist) if (s.contains(smallestStrings[i])) matches[i]++;
}