删除两个字符串中的常用单词

时间:2012-06-19 15:54:40

标签: salesforce apex-code

使用APEX我有两个字符串,并希望从每个字符串中删除两个常用字词。

String s1 = 'this and1 this is a string1';
String s2 = 'this and2 this is a string2';

结果将是:

s1 = 'and1 string1';
s2 = 'and2 string2';

我开始将每个字符串放在一个列表中:

List<String> strList1 = s1.split(' ');
List<String> strList2 = s2.split(' ');

不幸的是,removeAll()不是apex中的list方法,所以我无法执行:

strList1.removeAll(strList2);
strList2.removeAll(strList1);

有什么想法吗?使用套装会解决我的问题吗?

3 个答案:

答案 0 :(得分:1)

你有正确的想法,但只需要将列表转换为集合,这样你就可以使用apex removeAll()函数。

Set<String> stringSet1 = new Set<String>();
stringSet1.addAll(stringList1);
Set<String> stringSet2 = new Set<String>();
stringSet2.addAll(stringList2);

然后你可以使用remove all函数(保留stringSet1的副本,因为你正在修改它并希望使用原文从字符串集2中删除)

Set<String> originalStringSet1 = stringSet1.clone();
stringSet1.removeAll(stringSet2);
stringSet2.removeAll(originalStringSet1);

完成后,您可以遍历字符串列表并使用字符串之间不常见的所有单词构建字符串。

答案 1 :(得分:0)

你可以重写你的字符串:

通过单词进行迭代,如果你有不同的单词,只需将它们添加到新字符串的末尾

    // inside loop
    if (!word1.equals(word2)) {
        str1new += word1;
        str2new += word2;
    }

// outside of loop
s1 = str1new;
s2 = str2new;

当然你需要在单词之间添加空格。您如何期望您的程序可以使用不同长度的字符串?

答案 2 :(得分:0)

尝试使用此代码

String s1 =“this and1 this is a string1”;             String s2 =“this and2 this is a string2”;

        List<String> strList1 = s1.Split(' ').ToList();
        List<String> strList2 = s2.Split(' ').ToList();

        var intersection = strList1.Intersect(strList2);
        foreach (var item in intersection.ToList())
        {
            strList1.RemoveAll(p => p.Equals(item));
            strList2.RemoveAll(p => p.Equals(item));
        }