如何用C#中的另一个替换文本中的char?

时间:2013-01-26 13:22:21

标签: c# dictionary char iteration

如果有人可以提供帮助,我会很感激! 我需要用我的词典中的另一个字符替换我的文本中的每个字符(加密,我从文件中读取)。

 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();

此代码无法正常运行,因为替换错误。 我会非常感激任何帮助!

3 个答案:

答案 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)