C# 如何替换字符串中的某些字符?

C# 如何替换字符串中的某些字符?,c#,string,replace,C#,String,Replace,我正试图找到解决问题的方法,需要一个解决方案(好吧,我可能会得到负面评价),但这里有: 让我们假设我有以下几点: Actual: A B D E F G H I J K L M N O P Q R S T U V W X Z Change: X F S M E P U T V L Q H K I J W A D O R Z B G N 基本上,我想用“更改”列表中的相应字符替换“实际”列表中包含的字符串中的所有字符。如果某个字符不在“实际”列表中,它必须保持不变 我曾尝试过这样做,但不起作

我正试图找到解决问题的方法,需要一个解决方案(好吧,我可能会得到负面评价),但这里有:

让我们假设我有以下几点:

Actual: A B D E F G H I J K L M N O P Q R S T U V W X Z 
Change: X F S M E P U T V L Q H K I J W A D O R Z B G N 
基本上,我想用“更改”列表中的相应字符替换“实际”列表中包含的字符串中的所有字符。如果某个字符不在“实际”列表中,它必须保持不变

我曾尝试过这样做,但不起作用:

foreach (var c in charList) {
    if (input.Contains (c.Key)) {
        foreach (var a in charList) {
            decrypted[i] = a.Key;
        }
        i++;
    }
}
我基本上只得到“N”值。。有什么想法吗?谢谢

查看以下内容:

        string InputString = "TEST";
        string EncryptedString = string.Empty;
        string IfContains =  "ABDEFGHIJKLMNOPQRSTUVWXZ";
        string ReplaceWith = "XFSMEPUTVLQHKIJWADORZBGN";

        foreach (char InputChar in InputString)
        {
            int IndexToReplace = IfContains.IndexOf(InputChar);

            if (IndexToReplace >= 0)
            {
                EncryptedString = string.Concat(EncryptedString, ReplaceWith[IndexToReplace]);
            }
        }
更新:您应该注意这个案例。执行不区分大小写的搜索是个更好的主意。

我的即兴创作:

1.首先创建一个字典

        List<char> Actual = "A B D E F G H I J K L M N O P Q R S T U V W X Z".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s[0]).ToList();
        List<char> Change = "X F S M E P U T V L Q H K I J W A D O R Z B G N".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s[0]).ToList();
        Dictionary<char, char> ReplacemetRules = Actual.ToDictionary(s => s, s => Change[Actual.IndexOf(s)]);
然后使用:

        string output = string.Concat(input.Select(c => ReplacemetRules.ContainsKey(c) ? ReplacemetRules[c] : c)));

您使用的是与@Nile相同的stringduplicate,不会确切地说它是一个副本,但可以。和更新。哦,我得到了负面反馈。。哇,谢谢你的回复。。似乎我不能使用IfContains。。foreach(输入中的var InputChar){int IndexToReplace=IfContains.IndexOf(InputChar);}@Phorce对不起,我不明白。它对你不起作用吗?不,'名称'IfContains'在当前文件中不存在context@Phorce伙计,你复制了全部代码了吗?我在循环之前声明了4个字符串,它们是必需的。嘿,但是“IfContains”是一个列表,“ReplaceWith”是一个字典。。我在int IndexToReplace中得到一个错误,它说的是最佳重载方法。。无法将char转换为KeyPairValue任何想法@Andre Calil?嘿@horgh那么您的方法是替换实际值,更改然后替换字符串中的所有字符?这些字符实际上没有被替换。原始字符串保持不变。但是会创建一个新字符串并(在本例中)返回到
输出
变量中。如果您不熟悉Linq,可能很难理解它是如何工作的。实际上,它使用输入字符串中的每个字符,在字典中搜索这样的键,并返回字典中的值(如果键存在)或输入字符本身,如果字典缺少该键,
input.Select(…
生成一个字符数组(实际上
IEnumerable
),用于通过
string.Concat
method组合输出字符串谢谢。当我回到家@horgh时,我将尝试此方法。我正在尝试根据字母频率解密一些数据
     string input = "TEST";
        string output = string.Concat(input.Select(c => ReplacemetRules.ContainsKey(c) ? ReplacemetRules[c] : c)));
foreach (var c in charList) {
    if (input.Contains (c.Key)) {
        foreach (var a in charList) {
            decrypted[i] = a.Key;
        }

        i++;
    }
}