查找字符串数组列表之间的共同点

时间:2014-04-02 11:33:39

标签: java android arrays string arraylist

我是String的数组列表"mArrayListvarinats",其中包含管道分隔的字符串,如

225356175|225356176|225356177|225356178|225356179|225356180|225356181|225356182|225356183|225356184|225356185|225356186|225356187|225356188|225356189|225356190|225356191|225356192

mArrayListvarinats的大小可能 0到n 现在我想找出mArrayListvarinats中这些字符串之间的公共字符串。

代表。如果它的大小为2,则代码可能如下所示。

String temp[] = mArrayListvarinats.get(0).split("\\|");
String temp1[] = mArrayListvarinats.get(1).split("\\|");

然后循环将在两个数组上工作以获得常见的一个。但是如何在循环内的任何大小实现它,因为那些临时数组将在mArrayListvarinats的循环中生成?

7 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

HashSet<String> allStrings = new HashSet<String>();
HashSet<String> repeatedStrings = new HashSet<String>();

for(String pipedStrings: mArrayListvarinats){
    String temp[] = pipedStrings.split("\\|");
    for(String str : temp){
        if(!allStrings.add(str)){
            repeatedStrings.add(str);            
        }
    }
}

这样,您将拥有包含所有唯一字符串的HashSet allStrings。另一个HashSet repeatedStrings包含多次出现的所有字符串。

答案 1 :(得分:1)

试试这个简短的版本:

public static void main(String[] args) {
    List<String> a = new ArrayList<>(asList("225356176|225356177|225356178".split("\\|")));
    List<String> b = new ArrayList<>(asList("225356175|225356176|225356177".split("\\|")));
    a.retainAll(b);
    b.retainAll(a);
    System.out.println(b);
}

输出:

[225356176, 225356177]

答案 2 :(得分:0)

遍历每个并将它们放入HashSet中。如果你在添加它时弄错了意味着它已经存在了。您可以将其放在单独的Hashset中。通过这种方式,您将获得所有唯一字符串的哈希集以及多次出现的另一个字符串哈希集

答案 3 :(得分:0)

Set<String> set=new HashSet<String>();
for (int i = 0; i < temp.length; i++) {
    set.add(str[i]);
}
for (int i = 0; i < temp1.length; i++) {
    set.add(str1[i]);
}

该集将包含常用字符串。

答案 4 :(得分:0)

如果您只想获取mArrayListvarinats变量中的常用字符串,那么您应该使用Set数据结构。 java中的Set只包含唯一条目。从示例字符串中可以看出,您正在收集具有数值的字符串。所以不会有任何问题。但是,如果您正在收集字母数字值,那么您需要处理字母表的情况,因为Set会收集区分大小写的值。因此,对于Set A 不等于 a

答案 5 :(得分:0)

这会在所有列表中找到共同点。

List<String> common = Arrays.asList(mArrayListvarinats.get(0).split("\\|"));
for(String varinats: mArrayListvarinats){
List<String> items = Arrays.asList(varinats.split("\\|"));
common = ListUtils.intersection(items,common);
}

但为此你必须使用Apache commons集合库,我希望这不是你的问题:)

答案 6 :(得分:0)

下面的代码将返回数组中每个字符串的频率。

public static void main(String[] args) {
        String mArrayListvarinats = "225356175,225356176,225356177,225356178,225356179,225356180,225356181,225356182,225356183,225356184,225356185,225356186,225356187,225356188,225356189,225356190,225356191,225356192,225356192";
        List<String> list = Arrays.asList(mArrayListvarinats.split(","));
        Set<String> uniqueWords = new HashSet<String>(list);
        for (String word : uniqueWords) {
            System.out.println(word + ": " + Collections.frequency(list, word));
        }
    }

频率大于1的字符串是重复/常见的。您可以根据频率采取行动。