2017-12-06 1 views
0

두 개의 배열이 있습니다. 하나는 특정 문자열에서 검색 할 문자 집합을 포함하고 다른 하나는 특정 문자를 대체 할 문자열 집합입니다 .String.Replace는 유니 코드 문자 'ARABIC LETTERS'를 대체하지 않습니다.

특정 문자가 발견되면 주어진 문자열을 수정하기 위해 표준 String.Replace()을 사용하려고합니다. 내가 사용하려고하는 메서드는 문자열에 내 배열의 문자/문자가 포함되어 루프를 입력하고 작업을 실행하지만 끝에는 아무 것도 변경되지 않는다는 것을 감지합니다.

왜이 문제를 해결할 것인지 잘 모르겠습니다. 아래는 제 코드와 결과입니다.

static void Main(string[] args) 
{ 
    var wordToPass = "heyك"; 

    wordToPass = wordToPass.MultiReplace(); 

    Console.WriteLine(wordToPass); 
    Console.ReadKey(); 

} 

확장 방법

는 문자를 대체 :

public static class StringExtension 
{ 
    public static readonly char[] SignsArray = new char[] { 'ك', 'ـ', 'ض', 'ؤ', 'ا', 'ط', 'ئ', 'إ', 'ر', 'أ', ' ', 'ہ', 'ء', 'ب', 'ة', 'ت', 'ز', 
               'س', 'ص', 'ظ', 'ع', 'ج', 'ح', '´', 'ف', 'ث', '¶', '°', '؛', '·', '`' }; 

    public static readonly string[] RepArray = new string[] { "SS", "UE", "OE", "AE", "C", "OE", "AE", "AA", "N", "A", "A", "A", "A", "E", "E", "E", "O", "O", "O", 
                "U", "U", "I", "I", "'", "Y", "E", "A", ".", ".", ".", "'"}; 


    // Extension on String 
    public static string MultiReplace(this string stringValue) 
    { 
     HashSet<char> set = new HashSet<char>(SignsArray); 

     for (int i = 0; i < stringValue.Length; ++i) 
     { 
      var currentCharacter = stringValue[i]; 
      string valueToReplace; 
      string replaceValue; 
      if (set.Contains(currentCharacter)) 
      { 
       valueToReplace = Char.ToString(stringValue[i]); 
       replaceValue = RepArray[Array.IndexOf(SignsArray, currentCharacter)]; 
       stringValue.Replace(Convert.ToString(currentCharacter), replaceValue); 
      } 
     } 

     return stringValue; 
    } 
} 

답변

2

.Replace 새로운 문자열을 반환, System.String 불변 때문이다.

재 할당을 고려하십시오.

stringValue = stringValue.Replace(Convert.ToString(currentCharacter), replaceValue); 
+0

넵. 말이된다. 고맙습니다. –

+0

이 질문에 답하는 다른 질문을 살펴 보았지만 바꾸기의 반환 값을 다시 지정하는 것을 염두에 두지 않았습니다. 한숨 –