2017-12-19 1 views
0

Ich möchte Wörter "apple" aus einer Zeichenfolge von Textfeld löschen. Textbox enthält mehr als 3 Apple Worte. Ich muss wählen nur 3 zu löschen.Löschen Sie 3 identische Wörter aus einem Text nicht alle

Ich habe diesen Code verwendet, aber es löschen alle Apple-Wörter aus der Zeichenfolge.

private void button4_Click(object sender, EventArgs e) 
{ 
    textBox3.Text = textBox3.Text.Replace("apple",""); 
} 

Ich möchte nur drei Worte löschen. Hast du eine Idee, wie du das erreichen kannst?

Please see the image

+0

Zeigen Sie uns, was Sie bis jetzt versucht haben, es zu lösen –

+4

Bitte seien Sie genauer. Haben Sie jemals versucht, den Code, den Sie bereits haben, zu verbessern? Wenn Sie nur drei Instanzen ersetzen möchten, spielt es eine Rolle, welche Instanzen? An dieser Stelle fragen Sie uns im Grunde nur, Sie sollten eine korrekte Implementierung für Sie schreiben, was nicht der Grund für die Existenz von Stack Overflow ist. –

+0

Ich werde wieder bearbeiten – user3398379

Antwort

2

Sie könnten versuchen, für das Wort „Apfel“ dreimal zu suchen (oder weniger, wenn es nicht drei Mal erscheint) in der Zeichenfolge und es von den aktuellen Zeichenfolge zu entfernen.

private void button4_Click(object sender, EventArgs e) 
{ 
    const string stringToRemove = "apple"; 

    int i = 0; 
    int index = 0; 
    string textBoxString = textBox3.Text; 

    while(i<3 && index >= 0) 
    { 
     index = textBoxString.IndexOf(stringToRemove); 

     textBoxString = (index < 0)? textBoxString : textBoxString.Remove(index, stringToRemove.Length); 
     i++; 
    } 

    textBox3.Text = textBoxString; 
} 
+0

nein. das funktioniert nicht ... es löscht alle Apple-Wörter – user3398379

+2

@ user3398379 Sind Sie sicher, dass Sie das 'i ++' am Ende haben? Es kann es nicht mehr als 3 mal hier ändern. – Isuka

+0

jetzt funktioniert es – user3398379

-3

Es gibt `s mehrere Art und Weise zu erreichen, was Sie wollen. 1 von ist verwendet Regex, und 1 von ist als Beispiel unten, im Grunde Schleife und ersetzen auf wie viele Zeit Sie wollen es zu sein.

string value = textBox3.Text; 
for(int a = 0; a < 2;a++){ 
value = value.replace("apple",""); 
} 

textBox3.Text=value; 
+3

Nein, das wird auch nicht kompilieren –

6

Sie die Überlastung von Regex.Replace verwenden könnten die maximale Anzahl von Mal zu spezifizieren

var regex = new Regex("apple"); 
var newText = regex.Replace(textBox3.Text, "", 3); 
+1

Wenn 'Apfel' könnte ein anderer Wert sein (zB' Apfel.') erwägen Sie, https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.escape (v = vs.110) .aspx für die Zeichenfolge. – mjwills

4

Noch eine weitere Möglichkeit zu ersetzen, ist zu Split (Behandlung "apple" als Separator) und Concat zurück:

// 3 + 1: we want 3 separators to be eliminated, and thus 4 = 3 + 1 parts 
textBox3.Text = string.Concat(textBox3.Text 
    .Split(new string[] { "apple" }, 3 + 1, StringSplitOptions.None)); 
+0

mit Hilfe von string.Join können Sie es auch in eine Replace-Methode ändern; o) –

+1

@Sir Rufo: ganz richtig, aber 'string.Concat (...)' ist kürzer und besser lesbar als 'string.Join ("", ...) ' –

+0

Natürlich und nach KISS ist das die richtige Lösung dafür.Mein Kommentar ist für zukünftige Leser, die sich fragen, wie es für eine Replace gemacht werden soll –

Verwandte Themen