Замена слово сочетания в строке на другое словосочетание - C#
Формулировка задачи:
Добрых времени суток. Есть List<string> со строками. В строках находится n-е количество одинаковых слово сочетаний разделенных текстом, нужно заменить только 1е встретившиеся словосочетание не трогая другие на другие слово сочетания, которые находятся в листбоксе. Например:
Заменить на:
При этом вместо слова "Топ" может быть другое, слово сочетание определяется ранее.
Пытался сделать так:
Но в итоге строка заменяется целиком
Лук темных эльфов авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов Кристальный меч ошдавыьдыавыштльщфышщвфыроу Кристальный меч Меч демона апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона аловытыаа Клинок богов авоалвиытшаовытш Клинок богов авыавыталыь Меч императора лдаатдвыаыь Меч императора
Лук темных эльфов (Топ) авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов Кристальный меч (Топ) ошдавыьдыавыштльщфышщвфыроу Кристальный меч Меч демона (Топ) апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона аловытыаа Клинок богов (Топ) авоалвиытшаовытш Клинок богов авыавыталыь Меч императора (Топ) лдаатдвыаыь Меч императора
for(int i = 0; i < listBox1.Items.Count; i++) { for (int j = 0; j < listBox1.Items.Count; j++) { if (str[i].Contains(Convert.ToString(listBox2.Items[j]))) listBox1.Items[i] = str[i].Replace(str[i], listBox2.Items[j] + grade[0]); } }
Решение задачи: «Замена слово сочетания в строке на другое словосочетание»
textual
Листинг программы
static void Main(string[] args) { Dictionary<string, string> replace = new Dictionary<string, string>(); List<String> list = new List<string>(); list.Add("Лук темных эльфов авпваплдвапьвдюбждбфджвбфвжд Лук темных эльфов"); list.Add("Кристальный меч ошдавыьдыавыштльщфышщвфыроу Кристальный меч"); list.Add("Меч демона апзлщлуцуцзйцусщтамнигупкнгййуйцуйц Меч демона"); list.Add("аловытыаа Клинок богов авоалвиытшаовытш Клинок богов"); list.Add("авыавыталыь Меч императора лдаатдвыаыь Меч императора"); replace.Add("Лук темных эльфов", "Лук темных эльфов (Топ)"); replace.Add("Кристальный меч", "Кристальный меч (Топ)"); replace.Add("Меч демона", "Меч демона (Топ)"); replace.Add("Клинок богов", "Клинок богов (Топ)"); replace.Add("Меч императора", "Меч императора (Топ)"); for(int i = 0;i<list.Count;i++) { List<String> str = list[i].Split(' ').ToList(); List<int[]> f = new List<int[]>(); for (int j = 0; j < str.Count ; j++) for (int k = j + 1; k < str.Count ; k++) { int t = j, x = j; if (str[j] == str[k] && str.IndexOf(str[j])==j) { while (k<str.Count && str[j++] == str[k++]) x++; f.Add(new int[]{t,x }); break; } } int num = 0; string ans = ""; for (int j = 0;j<str.Count ;j++) { if (f[num][0]==j ) { string a = ""; for (; j < f[num][1]; j++) a +=" " + str[j]; if (replace.ContainsKey(a.Trim())) ans +=" " + replace[a.Trim()]; } ans +=" " + str[j]; } list[i] = ans.Trim(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д