根据c#

时间:2015-10-20 07:36:37

标签: c# linq

我有一个带有一些特殊字符的字符串。

string strValue = "MyString[]{"; 

此处字符串strValue包含一些特殊字符,这些字符在字符数组arrFindString中提及,相应的字符需要替换为具有相同索引位置的arrReplaceString中另一个字符数组中的字符。

char[] findArray = {'[',']','{'};
char[] replaceArray = { '(', ')', '-' };

所以在我的例子中,字符串strValue有一个名为' ['。首先我们需要在findArray中找到该字符的相应索引,然后我们需要用具有该字符的字符替换该字符replaceArray中的索引相同。所以这里' ['必须由'('

取代

使用linq有什么办法可以实现吗?... 我知道它可以用于每个。请帮助

4 个答案:

答案 0 :(得分:2)

首先,我宁愿将findArrayreplaceArray合并为一个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()-