2012-10-18 3 views
1

나는 두 개의 문자열다른 문자열을 사용하여 특정 위치에서 특정 문자열을 변경하는 방법은 무엇입니까?

string str1 = "Hello World !"; // the position of W character is 6 
string str2 = "peace"; 
//... 
string result = "Hello peace !"; // str2 is written to str1 from position 6 

이 같은 기능이 있나요 : "안녕하세요"

string result = str1.Rewrite(str2, 6); // (string, position) 


이 편집 됨 단지 예입니다, 나는 단지 알고있는이 문자열에서 "W"문자가 존재 유무를 알 수없는 위치 : str1, str2, 위치 (int)

+1

더 자세히 설명해야합니다. 아래의 답은 서로 다른 문제 집합을 가정합니다. 무엇을 다시 작성해야합니까? 이 위치에 대체 문자열을 삽입하면됩니까? 아니면 원래 문자열에서 무언가를 제거해야합니까? 대체 문자열 또는 전체 단어의 문자 수만 원래 문자열에서 제거해야합니까? 전체 단어 란 무엇입니까? –

답변

1

@danludwigs 대답은 코드 이해 가능성의 관점에서 더 나은,하지만이 버전은 조금 더 빠릅니다. 바이너리 데이터를 문자열 형식 (wtf bbq btw :)으로 처리한다는 설명은 속도가 본질의 것이라는 것을 의미합니다. 바이트 배열이나 무언가를 사용하는 것이 문자열을 사용하는 것보다 더 좋을 수도 있지만 :

public static string RewriteChar(this string input, string replacement, int index) 
{ 
    // Get the array implementation 
    var chars = input.ToCharArray(); 
    // Copy the replacement into the new array at given index 
    // TODO take care of the case of to long string? 
    replacement.ToCharArray().CopyTo(chars, index); 
    // Wrap the array in a string represenation 
    return new string(chars); 
} 
+0

+1, 내 대답보다 효율적입니다. – danludwig

0

이 작업을 수행하는 많은 방법이 ...

있다 내가 게으른 엉덩이니까

, 나는 갈 것 :

result = str1.Substring(0, 6) + str2 + str1.Substring(12, 2); 

또는

result = str1.Replace("World", str2); 

내 조언은 Visual Studio에서 마우스 오른쪽을 것 "string"을 클릭하고 "Go To Definition"을 선택하십시오. 문자열 "class"에 사용할 수있는 모든 메서드가 표시됩니다.

+0

하지만이 경우에는 내 귀중한 느낌표 '!'가 표시되지 않습니다. –

+1

내 게시물을 편집하여 바보 같은 "!" ;) – LightStriker

3

확장 방법을 사용하여 만들 수는 있지만 만들 수는 있습니다.

public static class StringExtensions 
{ 
    public static string Rewrite(this string input, string replacement, int index) 
    { 
     var output = new System.Text.StringBuilder(); 
     output.Append(input.Substring(0, index)); 
     output.Append(replacement); 
     output.Append(input.Substring(index + replacement.Length)); 
     return output.ToString(); 
    } 
} 

그런 다음, 당신이 원래의 질문에 게시 코드가 작동합니다 :

string result = str1.Rewrite(str2, 6); // (string, position) 
+0

"Hello Worldsunderme!"와 같은 호출. Rewrite ("peace", 6)는 문자열 "Hello peacesunderme!" –

+0

@StephanSchinkel, 맞습니다. 질문에 따라, 당신이 당신의 코멘트에서 지적한 것처럼, 다른 결과를 갖는 것은 제약이 아닙니다. – danludwig

관련 문제