StreamReader st = new StreamReader(@"C:\path of text");
string text = st.ReadToEnd();
st.Close();
char[] textChar = text.ToCharArray(); //splitting text into characters
所以,在我的词典Dictionary<char, char> keys = new Dictionary<char,char>();
中,我有一些字母,说'n'和价值 - 另一个字母,说'a'。所以我需要在文本中用'a'替换每个'n'。字典分别有26个字母和26个字母值。
现在我尝试替换字母并将'解密'文本写入某个文件
StreamWriter sw = new StreamWriter(@"path for decrypted file");
foreach(KeyValuePair<char, char> c in keys)
{
for(int i =0; i< textChar.Length; i++)
{
if (textChar.Contains(c.Key))
{ //if text has char as a Key in Dictionary
textChar[i] = keys[c.Key]; //replace with its value
}
else
{
sw.Write(textChar[i]); //if not, just write (in case of punctuatuons in text which i dont want to replace)
}
}
}
st.Close();
file.Close();
此代码无法正常运行,因为替换错误。 我会非常感激任何帮助!
答案 0 :(得分:1)
尝试类似于此的代码,我在没有Visual Studio的情况下编写代码,因此可能需要进行一些更正:)
string text = File.ReadAllText(@"path for decrypted file");
foreach(var key in keys)
{
text = text.Replace(key.Key, key.Value);
}
答案 1 :(得分:0)
试试这个:
StreamReader st = new StreamReader(@"C:\path of text");
string text = st.ReadToEnd();
st.Close();
foreach(KeyValuePair<char, char> c in keys)
{
text = text.Replace(c.Key, c.Value);
}
String.Replace返回一个新字符串,其中此实例中出现的所有指定Unicode字符都替换为另一个指定的Unicode字符。
为什么使用char[] textChar
?在大多数情况下,最好使用string
。
答案 2 :(得分:0)
您的代码存在问题......
如果(例如)您有一个键(a,z)和一个键(z,b)会发生什么。如果您只是应用直接交换,那么所有的a将转为z,然后将所有z转换为b。 (这意味着你所有的和z都转向了b)。
您需要将项目转换为某个中间值,然后您可以根据需要进行解码。
(a,z)
(z,b)
编码
(a,[26])
(z,[02])
解码
([26],z)
([02],b)