2016-09-06 1 views
-2

Ich habe eine Zeichenfolge (String1) mit dem Text "Hallo".C# überprüfen, ob ein Buchstabe in String A String B enthält

Jetzt möchte ich überprüfen, ob String2 irgendeinen Buchstaben von String1 hat. Wenn ja, möchte ich diesen Buchstaben in String2 entfernen. Wie kann ich das machen?

+0

Strings Arrays von Zeichen sind, so dass Sie mit 'foreach (var Zeichen in Text) beginnen {if (text2.Contains (Zeichen) {etc ..}} ' – Quantic

+0

Naive Möglichkeit besteht darin, durch jeden Buchstaben in String1 zu iterieren, dann durch jeden Buchstaben in String2 zu iterieren und eine logische Überprüfung durchzuführen –

+0

Können die Zeichen in irgendeiner Reihenfolge erscheinen? Zum Beispiel, wenn Sie die Zeichenfolgen "dfs" und "abf" hätten, würden Sie das f von einem von ihnen entfernen wollen? (Wenn sie nur in der "gleichen" Position auftreten könnten - z.B. "dfs" und "afb", können Sie dies effizienter tun). – EJoshuaS

Antwort

14

Versuchen Sie mit Linq; wenn alle Zeichen des firstString sind im secondString zu überprüfen:

bool result = firstString.Intersect(secondString).Any(); 

entfernen firstString Zeichen aus dem secondString:

string result = string.Concat(secondString.Except(firstString)); 

bearbeiten: Es gibt eine Nebenwirkung von Except: es entfernt Duplikate von der secondString auch, siehe Ivan Stoev Kommentar unten. Zur Erhaltung der Duplikate

HashSet<char> toRemove = new HashSet<char>(firstString); 
string result = string.Concat(secondString.Where(c => !toRemove.Contains(c))); 
+0

Funktioniert gut! Vielen Dank! :) – LordSpigot

+1

Die zweite funktioniert nicht. firstString = "bc", secondString = "abca", result = "a" (sollte "aa" sein) –

+1

@Ivan Stoev: schöner Fang! Vielen Dank! Ich habe die Tatsache übersehen, dass'Except' IEnumerable 'in * set * verwandelt und somit Dubletten löscht. Ich habe die Antwort bearbeitet. –

0

Self Explanatory:

 string a = "HELLO"; 
     string b = "GOODBYE"; 
     foreach (char c in a.ToCharArray()) 
     { 
      if (b.Contains(c)) { b = b.Replace(c.ToString(), string.Empty); } 
     } 

Ausgang: b = "GDBY"

0

Helper erstellen wie unten:

IEnumerable<Tuple<char, int>> IndexDistinct(IEnumerable<char> source) 
{ 
    var D = new Dictionary<char, int>(); 
    foreach (var c in source) 
    { 
     D[c] = D.ContainsKey(c) ? (D[c] + 1) : 0; 
     yield return Tuple.Create(c, D[c]); 
    } 
} 

Jetzt Hilfsmethode in einem Aufruf Funktion wie:

string removeMatch(string str1, string str2) 
{ 
    return new string(
     IndexDistinct(str1) 
      .Except(IndexDistinct(str2)) 
      .Select(x => x.Item1) 
      .ToArray()); 
} 
0

Dies ist wahrscheinlich der kürzeste Weg

var str1 = "Hello World"; 
var str2 = "Hello Word Again"; 

var result = string.Joing("", str2.Except(str1)); 

Console.WriteLine(result); //Again 
Verwandte Themen