我有一个带有一些特殊字符的字符串。
string strValue = "MyString[]{";
此处字符串strValue包含一些特殊字符,这些字符在字符数组arrFindString中提及,相应的字符需要替换为具有相同索引位置的arrReplaceString中另一个字符数组中的字符。
char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };
所以在我的例子中,字符串strValue有一个名为' ['。首先我们需要在findArray中找到该字符的相应索引,然后我们需要用具有该字符的字符替换该字符replaceArray中的索引相同。所以这里' ['必须由'('
取代使用linq有什么办法可以实现吗?... 我知道它可以用于每个。请帮助
答案 0 :(得分:2)
首先,我宁愿将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();
答案 1 :(得分:1)
这是最佳方式。这里不需要使用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()-
答案 2 :(得分:1)
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))));
答案 3 :(得分:1)
这是一个单线解决方案:
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()-