抱歉我的英语不好。所以,我有一个代码。
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
答案 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' };