Entwickler-Ecke
Basistechnologien - Remove bei Strings
Ccenter - So 19.09.10 14:59
Titel: Remove bei Strings
Ich bin langsam am verzweifeln:
Ich habe einen langen String in dem ich einen bestimmten Textausschnitt durch einen anderen ersetzen will. Ich weiß allerdings nur womit der String aufhört und endet. Den Mittelteil kenne ich nicht, deshalb ist replace jetzt gerade nicht zu gebrauchen.
Zum Üben habe ich nun folgenden String genommen:
C#-Quelltext
1: 2: 3: 4: 5:
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbb-text:"hallo"-dddddddddddddddddddddddddddddddddddd aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
Ich weiß der Teil fängt mit text:" an und hört mit einem " wieder auf. Dass dort hallo steht, weiß ich nicht.
Um den Teil nun zu entfernen und einen neuen einzusetzen habe ich folgendes geschrieben:
C#-Quelltext
1: 2: 3: 4: 5:
| int stIndex = strVar.IndexOf("text:\"", 0); int enIndex = strVar.IndexOf("\"", (stIndex+7)); strVar = strVar.Remove(stIndex , enIndex); strVar= strVar.Insert(stIndex, "text:\"Dieser Bereich wurde ersetzt\""); MessageBox.Show(strVar); |
Wenn ich mir nun aber das Ergebniss ausgeben lasse, fehlen am Ende ganz viele a's. Die d's sind komplett weg. Es scheint so als ob der enIndex zu hoch ist und zu viel vom String nach dem letzten " entfernt wird. Hat jemand eine Idee wo der Fehler liegt?
Trashkid2000 - So 19.09.10 16:48
Hallo,
das Problem ist diese Zeile:
C#-Quelltext
1:
| strVar = strVar.Remove(stIndex , enIndex); |
Bei der Methode Remove gibt man als ersten Parameter den Startindex an, und als 2. Parameter wird die
Anzahl der Zeichen erwartet, dei aus dem String gelöscht werden sollen (also nicht Startindex und Endindex).
Also müsste das bei Dir so aussehen:
C#-Quelltext
1:
| strVar = strVar.Remove(stIndex, enIndex - stIndex + 1); |
Oder besser mit einem regulären Ausadruck:
C#-Quelltext
1:
| string changedText = Regex.Replace(strVar, "text:\".+?\"", "text:\"Dieser Bereich wurde ersetzt\""); |
LG, Marko
Ccenter - Mo 20.09.10 14:51
Was für ein blöder Fehler :D
Danke, es funktioniert jetzt.
IsNull - Do 23.09.10 10:37
An deiner Stelle würde ich mich mal in RegEx einlesen, dann kannst du soche String-such Unterfangen in Zukunft in einem Einzeiler(zumindest die Logik ist in einer Zeile) lösen.
In diesem Falle würde das RegEx Match-Pattern so aussehen:
Ccenter - So 10.10.10 19:39
So ich stehe nun wieder vor dem Problem und möchte die Regexvariante verwenden.
Dazu habe ich mir dieses Tut angeguckt:
http://www.mycsharp.de/wbb2/thread.php?threadid=41009.
Ich habe jetzt das Pattern von IsNull benutzt:
C#-Quelltext
1: 2:
| Regex userRegex = new Regex("text:(.*?)"); textBoxTEXT.Text = ... |
Ich möchte nun in die Textbox den Inhalt von (.*?) einsetzen. Aber dazu hab ich nichts gefunden. Wie macht man das?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!