C# - Защо Съдията не харесва .Contains() при работа със стрингове - Emoji Sumator, Regex
Здравейте, колеги,
Имате ли идея защо Съдията не харесва .Contains() при работа със стрингове? Или къде греша при ползването?!?
Гледам, че String.Contains го има и в .NET Framework също, но не виждам друга причина освен подобен проблем с инсталацията на Съдията... VS 2017 ми работи коректно с този метод, или поне не намерих вход, с който да счупя разпознаването...
При дадената задача реших да проверя дали даден стринг примерно:
seven
се съдържа в стрингова колекция примерно:
:england: :done: :seven: :hamster:
Тази идея ми дойде за решение, но Съдията дава грешка 90/100:
(разбира се, време ми отне, за да отгрия, че точно това не се харесва)
if (string.Join("", matchCollection).Contains(emojiName))
{
totalPower *= 2;
}
Реших задачата по алтернативен начин - 100/100:
foreach (var match in matchCollection)
{
string tempMatch = match.ToString();
string tempEmojiName = tempMatch.Remove(0, 1);
tempEmojiName = tempEmojiName.Remove(tempEmojiName.Length - 1, 1);
if (tempEmojiName == emojiName)
{
totalPower *= 2;
break;
}
}
Мой код - линк.
Съдия - линк.
Условие на задачата - линк.
Поздрави,
Иван
Здравей,
Благодаря, поучителни са ти съветите! Разибира се, и решението ти е добро.
Не разбирам съвсем - има ли последствия при употребата на string.Contains() предвид, че е culture-insensitive? Ясно е, че точка, запетая и др. се различават в различните регионални настройки, но не разбирам как точно рефлектира при сравняването...
Допълнително, до колкото разбирам, няма чист/лесен вариант /без изрязване или добавяне на символи/ за стравняване/търсене на стрингове с други стригове? За char да се тъсят в стрингове има решения, но за да реша задачата по трудния и непрепоръчителен начин си беше по принуда... просто не знам как иначе.
Поздрави,
Иван
string.Contains() е начина за търсене на substring-ове в други низове. И аз не успях да счупя входа (а и не си играх много), но без да видя теста не мога със сигурност да кажа какъв е проблема. Най-вероятно е нещо тъпо, но... Относно сравнението на низове в .Contains(), ще има значение ако очакват да ги сравняваш case-insensitive, което е малко вероятно според мен. Culture-а не би трябвало да играе фактор тук.
Лошото в твоя подход е, че правиш string.Join() върху колекция от Match-ове, вместо да провериш дали има елемент в нея, който да съвпада с входа, а не самото сравнение на низове, въпреки че и това е валиден подход за задачата.
Добро утро,
Благодаря, обогати ме с идеи за работа, т.е. вече съм готов да архивирам случая.
Успешен ден,
Иван :)