【问题标题】:How to Replace char in text with another one in C#?如何将文本中的字符替换为 C# 中的另一个字符?
【发布时间】:2013-01-26 13:22:21
【问题描述】:

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

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

此代码无法正常工作,因为替换错误。 如果有任何帮助,我将不胜感激!

【问题讨论】:

  • Gyuzal 你知道你想改变什么键,如果是这样,那么你需要在 for 循环内有一个 Switch 语句,也许你必须马上知道你想要的键是什么替换..
  • Gyuzal 如果您展示文本的真实示例以及您的预期结果是什么也会有所帮助..不确定您要做什么对我来说听起来有点可疑..哈哈
  • 为什么需要替换文本中的字符?你能解释得更详细些吗?可能有一个简单的解决方案来解决您的问题。
  • 是的,我很抱歉:) 我需要使用频率分析来解密我的文本,所以在我的字典中我有键值,这是我计算出来的。比如,'m' 必须替换为 'c','n' 替换为 'r','k' 替换为 'y' 等等。示例:加密文本:mnkore -> 解密文本:crypto
  • 你能把这个例子添加到你原来的问题中吗..加密的文本也会改变吗..?如果是这样,那么你需要使用常规的加密/解密机制你看过Cryptography Class看看这个项目你在做什么是一种愚蠢的加密方式这里是一个很好的链接Cryptography in C#

标签: c# dictionary char iteration


【解决方案1】:

试试类似这样的代码,我是在没有 Visual Studio 的情况下编写的,所以可能需要一些更正:)

string text = File.ReadAllText(@"path for decrypted file");

foreach(var key in keys)
{
  text = text.Replace(key.Key, key.Value);
}

【讨论】:

    【解决方案2】:

    试试这个:

    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

    【讨论】:

      【解决方案3】:

      你的代码有问题...

      如果(例如)您有一个键 (a,z) 和一个键 (z,b),会发生什么。如果你只是应用直接交换,你所有的 a 将变成 z,然后你所有的 z 变成 b。 (这意味着你所有的 a 和 z 都变成了 b)。

      您需要将项目转换为某个中间值,然后可以根据需要进行解码。

      (a,z)
      (z,b)
      

      编码

      (a,[26])
      (z,[02])
      

      解码

      ([26],z)
      ([02],b)
      

      【讨论】:

      • Gyuzal 的整个方法存在一个完整的问题。只有当他一直试图解密同一个单词时,这才有效。在他提到的评论中考虑他的例子mnkore并让它解密到crypto 停止尝试捷径..这并不比想要HardCode 的人好,因为他们懒得写一个方法或函数来做正确的工作..
      猜你喜欢
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2013-06-26
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多