C#:用其他键盘布局中的字母替换随机字母

时间:2017-07-10 12:26:39

标签: c# replace letters

抱歉我的英语不好。所以,我有一个代码。

    public Random rnd = new Random();

    public string RandomizeLetters(string text)
    {
        string variations = "";

        foreach (var letter in text)
        {
            var а = new List<string> { "а", "аa" };
            var е = new List<string> { "е", "еe" };
            var о = new List<string> { "о", "оo" };
            var р = new List<string> { "р", "рp" };
            var с = new List<string> { "с", "сc" };
            var у = new List<string> { "у", "уy" };
            var х = new List<string> { "х", "хx" };

            var alphavite = new List<List<string>> { а, е, о, р, с, у, х };

            var res = new StringBuilder();

            foreach (var x in alphavite)
            {
                if (x.Exists(e => e.EndsWith(letter.ToString())))
                {
                    res.Append(x[1][rnd.Next(0, x[1].Length)]);
                }
            }

            res.Append(letter.ToString());

            variations += res;
        }

        return variations.ToString();
    }

此代码用字母替换随机字母,这些字母在视觉上类似于来自不同键盘布局的字母,在我的例子中,从俄语键盘布局到英文键盘布局。 但是,我得到的文字有重复的字符,而不是理想的结果。

以下是我要处理的文字:

  

Дляпроверкиналичияввашемтекстесимволовиздругогоязыка - скопируйтеисходныйтекст,вставьтееговполениже,ивыберитенужныйчекбоксязыка

但是我在输出中得到的文字:

  

Дляпpроовeеpркинaаличиявваашeемтеекcстeеcсимвоолоовиздрруугоогооязыкaа - сскоопиpрууйтееиcсxхoодныйтеекcст,всстaавьтееeегoовпоолeенижее,ивыбeеpритeенyужныйчеекбоокcсязыкаа

如何解决?我在服务的帮助下检查文本以检查字符:raskladka.obmen-service.com

2 个答案:

答案 0 :(得分:0)

即使您稍后用res.Append(x[1][rnd.Next(0, x[1].Length)]);替换字母,您仍会附加基本字母:res.Append(letter.ToString()); 尝试添加条件:

        bool replaced = false;
        foreach (var x in alphavite)
        {
            if (x.Exists(e => e.EndsWith(letter.ToString())))
            {
                res.Append(x[1][rnd.Next(0, x[1].Length)]);
                replaced = true;
            }
        }
        if(!replaced)
            res.Append(letter.ToString());

答案 1 :(得分:0)

也许你应该用Unicode字符集中的类似西里尔字母替换英文字母,例如:

    var а = new List<string> { 'а', '\u0430' };
    var а = new List<string> { 'p', '\u0440' };
    var а = new List<string> { 'y', '\u0443' };