0

使用 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 中的列表方法,所以我无法执行:

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

有任何想法吗?使用集合会解决我的问题吗?

4

3 回答 3

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);

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

于 2012-06-20T04:15:09.393 回答
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));
        }
于 2012-06-19T16:13:49.137 回答
0

你可以重写你的字符串:

遍历单词,如果您有不同的单词,只需将它们添加到新字符串的末尾

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

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

当然,您需要在单词之间添加空格。您希望您的程序如何处理不同长度的字符串?

于 2012-06-19T15:59:08.343 回答