2010-12-13 4 views
2

문자열의 임의의 위치에 html 인 배열의 모든 요소를 ​​삽입해야하는이 코드가 있습니다. 그러나 마지막 요소 만 해당 문자열에 삽입합니다. 물론 당신이 마지막 결과를 확인하려고 있도록 모든 반복에 txtOutput.Text의 내용을 (=)를 교체하는
코드가 배열의 모든 요소를 ​​문자열에 삽입하지 않습니다

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>"); 
} 

답변

2

도와주세요. 성능이 저하되고 병목 현상이있는 경우 += 을 먼저 사용하고 StringBuilder을 사용하십시오.

: 형식을 원하는 방식이 명확하지 않지만 적어도 +=은 현재 반복 결과 대신 추가 결과를 추가하고 할당합니다.

+0

내 문제는 200 단어 길이의 문자열이 있고, 4 개의 URL이 포함 된 배열이 있습니다. 그 URL을 임의의 위치에 문자열에 포함 시키려고합니다. +=을 사용하면 배열에 URL이 있고 모든 복사본에 같은 단어가 포함 된 HTML을 원래 문자열로 많이 만듭니다. – toad

1

foreach 루프의 모든 단계에서 텍스트 상자의 Text 속성을 덮어 씁니다. 마지막 루프의 결과 만 남아 있습니다.

1

반복적으로 "txtInput의 텍스트에 HTML을 삽입하고 결과를 txtOutput 텍스트에 할당하면 어떻게 될지 파악하십시오." 그러나 실제로는 txtInput의 텍스트가 변경되지 않으므로 매번 새로운 시작을합니다. 매번 txtOutput 텍스트를 버리면 새로운 내용으로 바뀝니다.

0

제이슨 (Jaison)은 += 대신 =을 사용하고 있지만 더 나은 해결책이 있다고 말했습니다. 문자열은 immutable입니다. string.Format 또는 StringBuilder를 사용하여 문자열을 연결합니다. 예 :

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(); 
관련 문제