2010-12-13 4 views
2

Ich habe diesen Code, der alle Elemente des Arrays, die einige HTML an zufälligen Stellen in einer Zeichenfolge einfügen soll. aber es fügt nur das letzte Element in diese Zeichenfolge ein. bitte helfen
Code fügt nicht alle Elemente von Array zu String

Random insertPos = new Random(); 
int pos = insertPos.Next(txtInput.Text.Length); 
int firSpace= txtInput.Text.IndexOf(" ", pos); 
int secSpace = txtInput.Text.IndexOf(" ", firSpace+1); 
int wLen = secSpace - firSpace;<br/> 
string word = txtInput.Text.Substring(firSpace,wLen); 
foreach (string url in urlArray) 
{ 
    txtOutput.Text = 
     txtInput.Text.Replace(word, "<a href=\"" + url + "\">" + word + "</a>"); 
} 

Antwort

2

Sie ersetzen (=), den Inhalt von txtOutput.Text bei jeder Iteration so natürlich sind Sie nur das letzte Ergebnis gehen zu sehen. Erwägen Sie die Verwendung += zuerst, um es zum Laufen zu bringen und dann ein StringBuilder, wenn Ihre Leistung leidet, und dies ist ein Flaschenhals.

: Es ist nicht ganz klar, wie Sie wollen, dass es formatiert, aber zumindest += wird anhängen und das Ergebnis der append statt nur das Ergebnis der aktuellen Iteration zuordnen.

+0

mein Problem ist, habe ich eine Zeichenfolge, sagen 200 Wörter lang, haben eine Reihe, die Urls enthält, etwa 4 Urls. ich möchte diese urls in string an zufälligen stellen einbetten, wenn ich verwenden erstellt es so viele kopien der ursprünglichen string wie ich urls in array und bettet html um das gleiche wort in allen kopien. – toad

1

Sie überschreiben die Text-Eigenschaft des Textfelds in jedem Schritt der foreach-Schleife. Nur das Ergebnis der letzten Schleife bleibt übrig.

1

Sie sagen immer wieder: "Finden Sie heraus, was passiert, wenn ich den HTML-Code in den Text einfüge und das Ergebnis dem Text txtOutput zuordne". Aber das ändert nicht wirklich den Text in txtInput, so dass Sie jedes Mal frisch beginnen; und du wirfst den txtOutput Text jedes Mal weg, um ihn durch die neuen Sachen zu ersetzen.

0

Wie Jaison sagte Sie verwenden = anstelle von +=, aber es gibt bessere Lösungen. Denken Sie daran, dass die Zeichenfolgen immutable sind. Verwenden Sie string.Format oder StringBuilder, in dem Sie Strings verketten. Beispiele:

string[] strArray = {"a", "b", "c"}; 
string word = "word"; 

//1st solution += 
string output = ""; 

foreach (string str in strArray) 
    output += "<a href=\"" + str + "\">" + word + "</a>"; 

Console.WriteLine(output); 

//better solution string.Format 
output = ""; 

foreach (string str in strArray)    
    output += string.Format("<a href=\"{0}\">{1}</a>", str, word); 

Console.WriteLine(output); 

//StringBuilder 
StringBuilder sb = new StringBuilder(); 

foreach (string str in strArray)    
    sb.AppendFormat("<a href=\"{0}\">{1}</a>", str, word); 

output = sb.ToString(); 

Console.WriteLine(output); 

//linq & string.Join 
output = string.Join("", strArray.Select(str => string.Format("<a href=\"{0}\">{1}</a>", str, word)).ToArray()); 

Console.WriteLine(output); 

Console.Read(); 
Verwandte Themen