2012-03-29 5 views
0

Hallo, ich habe mich vor dem Posten umgesehen und konnte nicht wirklich herausfinden, wie das geht, also habe ich mich gefragt, ob jemand helfen könnte.TryGetValue mit splitwords

Grundsätzlich mein Code gerade jetzt funktioniert wie, wenn ich ein Wort in dem Textfeld eingeben und dann auf eine Schaltfläche klicken, zeigt es das Split-Wort aus meinem Wörterbuch in Textfeld 2.

Zum Beispiel, wenn mein Wörterbuch-Datei enthält schwarz, weiß und ich gebe schwarz in Textfeld 1 und klicken Sie dann auf eine Schaltfläche, zeigt weiß in Textfeld 2. ... Sie bekommen mich?

Also, ich versuche es so zu bekommen, wenn ich eine Textzeile in Textfeld 1 eingebe, wird es diese Textzeile in Textfeld 2 kopieren und das Wort ändern. So

„mein Stuhl hat ein schwarzes Kissen“ würde „zum meinem Stuhl hat ein weißes Kissen“

private void btnTrans_Click(object sender, EventArgs e)  
{ 
    string outputString = null; 
    if (d.TryGetValue(inputBx.Text, out outputString))  
    {        
     outputBx.Text = inputBx.Text + outputString; 
    } 
    else  
    {     
     outputBx.Text = "Unknown";   
    } 
} 

Ich bin nicht sicher, wie ich über die Bearbeitung gehen würde, dass meine Bedürfnisse anzupassen, so irgendeine Hilfe?

+0

Nur ein Wort ändern? Was ist, wenn Sie ein Vielfaches haben? Sollte sich 'weiß' in' schwarz' und 'schwarz' in' weiß' ändern? – Oded

+0

Hoppla! Ja, wenn Sie mehrere haben können. und nicht nur ein Ein-Weg-Schalter, da sie durch ein Komma im Wörterbuch getrennt sind. schwarz, weiß, grün, blau und so weiter – user1300788

Antwort

2
var repStr = txtBox.Text; 

foreach (var kvp in d) 
{ 
    repStr = repStr.Replace(kvp.Key, kvp.Value); 
} 

txtBox2.Text = repStr; 

Sie werden wahrscheinlich kvp.Key mit Leerzeichen links und rechts auf kvp.Value mit Leerzeichen links und rechts ersetzen wollen, um sicherzustellen, dass Sie keine Teile von Wörtern ersetzen, oder Sie können das Wörterbuch der sicherstellen Schlüssel und Werte sind alle mit Leerzeichen links und rechts aufgefüllt.

Mit Wörterbuch: { "Weiß", "Schwarz"} { "Black", "White"}

Es wird ein Problem, wenn der Satz beide weiß und schwarz enthält.

Eine Alternative wäre Jetti's answer.

+0

Yup funktioniert richtig danke! : D – user1300788

+0

Wenn Sie es mit string.Split machen wollen, dann teilen Sie Leerzeichen und für jedes Wort im resultierenden Array, TryGetValue von d, und ersetzen, wenn gefunden. Aber das geht umsonst herum (und auch weniger effizient) – SimpleVar

+0

Es sollte in Ordnung sein, weil meine Wörterbuchwörter eigentlich alle CAPS sind. so funktioniert es. Wie würde ich jedoch die Fehlermeldung usw. kombinieren? – user1300788

1
string test = txtBox.Text; 
StringBuilder sb = new StringBuilder(); 
Dictionary<string, string> dict = new Dictionary<string, string>(); 
dict["black"] = "white"; 
dict["white"] = "black"; 
string[] chunks = test.Split(' '); 
foreach (string s in chunks) 
{ 
    string val; 
    if (dict.TryGetValue(s, out val)) 
    { 
    sb.Append(val); 
    sb.Append(" "); 
    } 
    else 
    { 
    sb.Append(s); 
    sb.Append(" "); 
    } 
} 
textBox2.Text = sb.ToString().TrimEnd(); 

Es gibt ein wenig mehr ist als (wie das Hinzufügen der Räume und dann Trimmen, wenn Sie in der Schleife herausfinden könnten, wenn es am Ende ist oder nicht) benötigt wird, aber dies auf jeden Fall genug zu bekommen Sie haben angefangen und Sie können mit der Optimierung beginnen, wenn Sie müssen. Hinweis: Ich habe das Wörterbuch nur für meine eigenen Tests hinzugefügt, um sicherzustellen, dass es funktioniert hat (was es tut).

+0

Danke, ich werde mit den Antworten herumspielen, um sicherzustellen, dass ich es vollständig verstehe. – user1300788

+0

@ user1300788 Sie sind willkommen, es ist nicht so prägnant wie [Yorye Nathan's Antwort] (http://StackOverflow.com/A/9925873/509746), aber es wird sicherlich nur die Wörter, die Schlüssel sind und Sie gewonnen haben Ich habe keine Teiltreffer. – Jetti

+0

Dies könnte zweimal im Wörterbuch über die gleichen Wörter gehen, was eine Schande ist. Um sicherzustellen, dass meine Antwort nicht mit Teilworten übereinstimmt, schlug ich vor, links und rechts mit Leerzeichen zu füllen. – SimpleVar

Verwandte Themen