C#替换为混合值

时间:2014-05-15 13:10:34

标签: c# php

我正在寻找的方法是在PHP str_replace()中复制C#功能。

PHP代码中它看起来像:

$string = 'This is my demo y string!';
$search_for = array("y","x","z");
$replace_with = array("1","2","3");
if( str_replace($search_for,$replace_with,$string) ) {
    $changed = true;
};

y更改为1x更改为2等等,如果有任何更改,请设置变量changed或执行任何其他代码。

如何在C#中执行相同操作? 谢谢。

3 个答案:

答案 0 :(得分:1)

你可以链接你的字符串替换:

var result = myString.Replace("y", "1").Replace("x", "2").Replace("z", "3");

那应该做你想要的。如果您有包含替换的数组,则另一种方法是:

var originalChar = new List<char> { '1', '2', '3' };
var replaceWith = new List<char> { 'x', 'y', 'z' };
originalChar.ForEach(x => myString = myString.Replace(x, replaceWith[originalChar.IndexOf(x)]));

这可能会更有效但你明白了。

检查更改:

如评论中所述,检查更改就像检查原始字符串和修改后的字符串是否不再相等一样简单:

var changed = (result != myString);

答案 1 :(得分:0)

您可以使用LINQDictionary

来执行此操作
var mappings = new Dictionary<char,char> { {'y', '1' }, { 'x', '2'} , {'z','3'}};

var newChars = inputString
                     .Select(x =>
                     {
                         if (mappings.ContainsKey(x)) 
                                return mappings[x];
                         return x;
                     })
                     .ToArray();

var output = new string(newChars);

bool changed = !(output == inputString);

答案 2 :(得分:0)

这是一个简单的端口,虽然我认为最好使用C#&#34;传统的&#34;方式。

string inputString = "This is my demoy y string!";
string[] searchFor = new string[] { "y", "x", "z" }; // or char[] if you prefer
string[] replaceWith = new string[] { "1", "2", "3" };
if (ArrayReplace(searchFor, replaceWith, ref inputString))
{
    bool changed = true;
}

bool ArrayReplace(string[] searchFor, string[] replaceWith, ref string inputString) 
{
    string copy = inputString;
    for (int i = 0; i < searchFor.Length && i < replaceWith.Length; i++) 
    {
        inputString = inputString.Replace(searchFor[i], replaceWith[i]);       
    }
    return copy != inputString;
}