我有两个数组,一个包含要在特定字符串中搜索的一组字符,另一个包含用于替换特定字符的字符串集(如果找到的话)。
我正在尝试使用标准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;
}
}
答案 0 :(得分:2)
.Replace
返回一个新字符串,因为System.String
是不可变的。
考虑重新分配。
stringValue = stringValue.Replace(Convert.ToString(currentCharacter), replaceValue);