Laden...

Geschicktes Ersetzen von Mustern

Erstellt von miketech vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.154 Views
M
miketech Themenstarter:in
82 Beiträge seit 2005
vor 17 Jahren
Geschicktes Ersetzen von Mustern

Hi zusammen,

habe folgendes Problem: Ich habe einen String mit bestimmten Platzhaltern.

"Das %A% ist ein %B% Test."

Nun möchte ich an den Stellen von %A% und %B% weitere Strings einsetzen. Das Problem ist, wenn ich das mit Replace mache und zuerst %A% und dann %B% ersetze: Ist in %A% auch wieder %B% enthalten wird das anschließend auch ersetzt. Das möchte ich gerne verhindern. Wie gehe ich denn da am geschicktesten vor? Muss ich mir da Positionen merken, was ich bereit ersetzt habe? Oder gibt es da was schönes in C#?

Gruß

Mike

B
342 Beiträge seit 2006
vor 17 Jahren

Hi,
so ganz verstehe ich das nicht, aber ich denke mal du weist deinem string nicht den zu, den Replace zurückgibt.
Du musst es also so machen:
mystring = mystring.Replace("%A%", "Blabla");
mystring = mystring.Replace("%B%", "Blablabla");
oder:
mystring = mystring.Replace("%A%", "Blabla").Replace("%B%", "Blablabla");
Greetz,
Big Al

Da man Spatzen nicht mit Kanonen jagt, sollte man auch nicht mit Computern auf Spatzenhirne losgehen.

3.170 Beiträge seit 2006
vor 17 Jahren
string result = String.Format("Das {0} ist ein {1} Test.",objectA,objectB);

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
miketech Themenstarter:in
82 Beiträge seit 2005
vor 17 Jahren

Hi,

danke für den Tipp. Also mit string.Format habe ich es jetzt mal versucht, funktioniert in einem Beispiel auch ganz gut. Nun wollte ich einen etwas komplexeren Text ersetzen und erhalte nun:

System.FormatException: Die Eingabezeichenfolge hat das falsche Format

Was könnte denn der Grund hierfür sein? Ich habe einfach ein Stück JavaScript Code, wo {0} und {1} usw. vorkommen und möchte die einfach ersetzen.

Gruß

Mike

M
1.439 Beiträge seit 2005
vor 17 Jahren

Die Glaskugel sagt mir:Die Eingabezeichenfolge hat das falsche Format
😉
zeig mal mehr...

3.170 Beiträge seit 2006
vor 17 Jahren

hmm... wo kommt die Eingabezeichenfolge denn her? Vielleicht ist das auch irgendein Codierungsproblem. Oder kannst Du mal in etwa die echte Zeichenfolge posten?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
miketech Themenstarter:in
82 Beiträge seit 2005
vor 17 Jahren

🙂 ja sorry.

<HTML>
	<HEAD>
	
	<script type="text/javascript">
	<!--
	
	
	function setTitle(title) {
		top.document.getElementById("title").innerHTML = title;
	}	
	
	function refresh() {
		var artist = "{0}";
		var title = "{1}";
		var album = "{2}";
		
		setTitle(title);
	}
	//-->
	</script>
	
	
	</HEAD>
	<BODY OnLoad="javascript:refresh();" bgcolor="#000099"></BODY>
</HTML>

Das ist der String.

Gruß

Mike

M
1.439 Beiträge seit 2005
vor 17 Jahren

Ich vermute mal, der mag die { bei den Funktionsaufrufen nicht.

M
miketech Themenstarter:in
82 Beiträge seit 2005
vor 17 Jahren

Hm und kann ich das irgendwie umgehen? Oder kann ich andere Platzhalter einfügen, die dann ersetzt werden? Also das obige Beispiel mit Replace macht halt Probleme, wenn z.B. in %A% auch ein %B% enthalten ist, weil das dann wieder ersetzt wird. Das möchte ich gerne vermeiden.

Gruß

Mike

3.170 Beiträge seit 2006
vor 17 Jahren

Das liegt an dengeschweiften Klammern im Javascript. Diese gelten ja als Steuerzeichen für denFormat-Befehl. Du musst doppelte geschweifte Klammern machen, um das zu escapen.


String.Format("myFunction(){{ Hier könnte Code stehen oder {0} erstezt werden... }}","irgendetwas");

gibt folgenden String:

myFunction(){ Hier könnte Code stehen oder irgendetwas erstezt werden... }

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
miketech Themenstarter:in
82 Beiträge seit 2005
vor 17 Jahren

Ah klasse, danke!

Gruß

Mike