0

APEX を使用すると、2 つの文字列があり、両方の文字列から共通の単語を削除したいと考えています。

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

次に、すべての削除機能を使用できます (stringSet1 を変更していて、オリジナルを使用して文字列セット 2 から削除するため、stringSet1 のコピーを保持します)。

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

それが終わったら、文字列リストを反復処理して、文字列間で共通ではないすべての単語で文字列を元に戻すことができます。

于 2012-06-20T04:15:09.393 に答える
0

文字列を書き換えることができます:

単語を反復処理し、別の単語がある場合は、それらを新しい文字列の末尾に追加するだけです

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

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

もちろん、単語の間にスペースを追加する必要があります。また、プログラムが長さの異なる文字列をどのように処理すると思いますか?

于 2012-06-19T15:59:08.343 に答える
0

このコードで試してください

String s1 = "これ and1 これは string1 です"; String s2 = "これ and2 これは 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 に答える