2011-02-23 162 views
0

我确实需要一个可用的ASP.NET C#代码来替换字符串中的字符。字符串中的字符替换

我的下面的代码工作正常,但在输入“a”的情况下它给了我一个输出为“678d”,但是在输入“c”的情况下输出正确,因为它是ie“8d”...这里它会自动替换剩余的值。我可以看到代码在一步一步的过程中执行......这导致我得到一个超载的输出。

{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Replace("a", "6b"); 
    builder.Replace("b", "7c"); 
    builder.Replace("c", "8d"); 
    return builder.ToString(); 
} 

现在,我确实需要将“a”替换为“6b”,它不应该加载其余的值。

回答

1

更独立于实际替代的,你可以做一个双向的更换:

首先替换的占位符的出现,将不会出现在字符串中(如%% 1 %%来代替“ a“,%% 2 %%代替”b“等)。

然后,在第二次运行中替换%% 1 %%用 “8D”,%% 2 %%用 “7C” 等

这将在任何情况下工作。

+0

感谢您的答案希望它可以帮助我在某些情况下...但代码变得困惑...不管怎样,非常感谢很多.... – lock 2011-02-23 10:19:34

0

你需要改变你的内容替换的顺序:

StringBuilder builder = new StringBuilder(); 
builder.Replace("c", "8d"); 
builder.Replace("b", "7c"); 
builder.Replace("a", "6b"); 
return builder.ToString(); 
+0

感谢您的回答,但我刚刚给出了一个示例代码。在我原来的代码中,一位必须用1000位代替,所以更改顺序将导致无法使用。我需要一个代码,它独立运行每一行,而不依赖于下一个或之前的行... – lock 2011-02-23 09:12:54

+0

我想这将是可能的使用数组语句...不知道,但只是一个公平的猜测...! – lock 2011-02-23 09:13:58

1

您的代码正在下降,虽然从一个声明给了别人 - 因此你首先替换6b中的一个,然后你更换的的B 6b与7c等。

因此,在特定情况下,你可以把你周围的语句,使后者语句不上与先前的反应顺序 - 像

builder.Replace(“C”,“8D” );

builder.Replace(“b”,“7c”);

builder.Replace(“a”,“6b”);

0

试试这个:

Regex rx = new Regex("a|b|c"); 

string str = "abc"; 

MatchEvaluator matcher = match => { 
    string value = match.Value; 
    if (value == "a") { 
     return "6b"; 
    } else if (value == "b") { 
     return "7c"; 
    } else { 
     return "8d"; 
    } 
}; 

var str2 = rx.Replace(str, matcher); 

或者这个,如果你不希望使用正则表达式:

static void Main(string[] args) 
{ 
    var replacements = new[] { 
     new Tuple<string, string>("a", "6b"), 
     new Tuple<string, string>("b", "6c"), 
     new Tuple<string, string>("c", "6a") 
    }; 

    string str = "adbc"; 
    var str2 = MultipleReplace(str, replacements); 
} 

static string MultipleReplace(string str, IEnumerable<Tuple<string, string>> replacements) { 
    StringBuilder str2 = new StringBuilder(); 

    for (int i = 0; i < str.Length; i++) { 
     bool found = false; 

     foreach (var rep in replacements) { 
      if (str.Length - i >= rep.Item1.Length && str.Substring(i, rep.Item1.Length) == rep.Item1) { 
       str2.Append(rep.Item2); 
       i += rep.Item1.Length - 1; 
       found = true; 
       break; 
      } 
     } 

     if (!found) { 
      str2.Append(str[i]); 
     } 
    } 

    return str2.ToString(); 
} 
+0

此代码显示编译时的错误...请清除... – lock 2011-02-23 09:48:52

+0

您必须添加'使用System.Text.RegularExpressions' – xanatos 2011-02-23 09:50:24

+0

错误命名空间元组和IEnumerable无法找到:(希望此代码的工作原理,但只是一些错误,请进一步帮助我...感谢您的回答... – lock 2011-02-23 10:29:56

0

你可以只使用空格一个字母后头。如在“a”中加上“a”并用所需文字替换“a”。