2017-12-06 24 views
0

2つの配列があります.1つは特定の文字列で検索する文字のセットを含み、もう1つは特定の文字を置き換える文字列のセットです。String.ReplaceはUnicode文字「ARABIC LETTERS」を置き換えません

特定の文字が見つかったときに、標準のString.Replace()を使用して、指定された文字列を変更しようとしています。私が使用しようとしている方法は、文字列に文字列/文字配列が含まれていることを検出し、ループに入り、操作を実行しますが、最後には何も変更されません。

これを解決する理由や方法についてはわかりません。以下は私のコードと結果です。

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

    wordToPass = wordToPass.MultiReplace(); 

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

} 

文字置き換えるための拡張メソッド:System.Stringは不変であるよう

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は、新しい文字列を返します。

再割り当てを検討してください。

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

意味をなさないありがとうございました。 –

+0

これに答える他の質問を見直しましたが、Replaceの戻り値を再割り当てすることに気をつけませんでした。一息 –

関連する問題