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++;
}
}