Verändern von Teilen eines Strings

03/05/2008 - 16:25 von Brian Schmalisch | Report spam
Hallo,

ich möchte bei Übereinstimmung eines Musters nur einen Teil eines Strings
veràndern. Z. B. habe ich einen string a="1280x800\\test1" und einen
weiteren string b="1280x800\\test2". Ich vergleiche die Strings mit einem
Muster z. B.

if(b.StartsWith("1280x800\\"))
{
jetzt soll nur der Teil, welcher dem Muster entspricht, ausgetauscht
werden - z. B. in "800x600\\", so dass zum Schluss a="800x600\test1" und
b="800x600\\test2" werden.
}

Gibt es dafür eine einfache Lösung oder muss ich erst aus den Variablen
Teilstrings bauen und diese dann wieder zusammensetzen?

mfg

Brian
 

Lesen sie die antworten

#1 ekkehard.horner
03/05/2008 - 19:09 | Warnen spam
Brian Schmalisch schrieb:
Hallo,

ich möchte bei Übereinstimmung eines Musters nur einen Teil eines
Strings veràndern. Z. B. habe ich einen string a="1280x800\\test1" und
einen weiteren string b="1280x800\\test2". Ich vergleiche die Strings
mit einem Muster z. B.

if(b.StartsWith("1280x800\\"))
{
jetzt soll nur der Teil, welcher dem Muster entspricht, ausgetauscht
werden - z. B. in "800x600\\", so dass zum Schluss a="800x600\test1" und
b="800x600\\test2" werden.
}

Gibt es dafür eine einfache Lösung oder muss ich erst aus den Variablen
Teilstrings bauen und diese dann wieder zusammensetzen?

mfg

Brian


Wenn die 'feste' Zeichenkette "1280x800" immer durch "800x600" ersetzt
werden soll, genuegt die String.Replace Methode:

String[] TestStrings = new String[]
{ "1280x800\\test1", "1280x800\\test2"
, "1281x799\\test3"
, "123x1234\\test4"
};
String FindPart = "1280x800";
String NewPart = "800x600";

Console.WriteLine("String.Replace");
foreach (String TestString in TestStrings)
{
Console.WriteLine("{0} => {1}", TestString,
TestString.Replace(FindPart, NewPart));
}

Ausgabe:

String.Replace
1280x800\test1 => 800x600\test1
1280x800\test2 => 800x600\test2
1281x799\test3 => 1281x799\test3
123x1234\test4 => 123x1234\test4

(Mich wuerde interessieren, ob das Verfahren, sich die Pruefung auf
die Anwendbarkeit der Ersetzung zu sparen und .Replace das selbst
entscheiden zu lassen, im Kontext .NET/CSharp als korrekt oder als
schmutzig gilt.)

Wenn nicht genau eine Zeichenkette ersetzt werden muss, bietet sich
die Benutzung einer Regex an:

Regex re3Digits = new Regex( @"x\d{3}\\" );
Console.WriteLine( "Regex.Replace" );
foreach (String TestString in TestStrings)
{
Console.WriteLine("{0} => {1}", TestString,
re3Digits.Replace( TestString, "x999\\" ) );
}

Ausgabe:

Regex.Replace
1280x800\test1 => 1280x999\test1
1280x800\test2 => 1280x999\test2
1281x799\test3 => 1281x999\test3
123x1234\test4 => 123x1234\test4

Ähnliche fragen