在c#中基于两个数组查找和替换字符串中的字符
本文关键字:替换 字符串 字符 数组 于两个 查找 | 更新日期: 2023-09-27 18:18:31
我得到了一个包含一些特殊字符的字符串。
string strValue = "MyString[]{";
这里字符串strValue包含一些特殊字符,这些字符在字符数组arrFindString中提到,相应的字符需要替换为arrReplaceString中具有相同索引位置的另一个字符数组中的字符。
char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };
所以在我的情况下,字符串strValue有一个字符叫做'['。首先我们需要在findArray中找到对应字符的索引然后我们需要将该字符替换为在replaceArray中具有相同索引的字符因此这里'['必须替换为'('
是否有同样的方法可以用linq来完成?
首先,我宁愿将findArray
和replaceArray
合并为单个Dictionary<Char, Char>
:
Dictionary<Char, Char> replaces = new Dictionary<Char, Char>() {
{'[', '('},
{']', ')'},
{'{', '-'},
};
则可以使用Linq:
string strValue = "MyString[]{";
String result = new String(strValue
.Select(c => {
Char substitute;
if (replaces.TryGetValue(c, out substitute))
return substitute;
else
return c;
})
.ToArray());
作为替代,您可以使用foreach循环:
StringBuilder sb = new StringBuilder(strValue.Length);
foreach (var c in strValue) {
Char substitute;
if (replaces.TryGetValue(c, out substitute))
sb.append(substitute);
else
sb.append(c);
}
String result = sb.ToString();
Linq方法
string strValue = "MyString[]{";
char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };
Func<char, int, char> GetC = (x, c) => c > -1 ? replaceArray.ElementAt(c) : x;
string Result = string.Concat(strValue.Select(x => GetC(x, Array.IndexOf(findArray, x))));
这是最优的方式。这里不需要使用LINQ
string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };
char[] charsValue = strValue.ToCharArray();
for (int i = 0; i < charsValue.Length; i++)
{
for (int j = 0; j < findArray.Length; j++)
{
if (charsValue[i] == findArray[j])
{
charsValue[i] = replaceArray[j];
continue;
}
}
}
string newStrValue = new string(charsValue); // MyString()-
这里有一个一行的解决方案:
string strValue = "MyString[]{";
char[] findArray = { '[', ']', '{' };
char[] replaceArray = { '(', ')', '-' };
string newStr = String.Join("", strValue.Select(c => findArray.Contains(c) ? replaceArray[Array.IndexOf(findArray, c)] : c));
Console.WriteLine(newStr); // MyString()-