Выполните Обрезку () в то время как Разделение использования ()

сегодня я задавался вопросом, существует ли лучшее решение, выполняют следующий пример кода.

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach(string s in split)
{
  if(s.Trim() == match){// asjdklasd; break;}
}

Существует ли способ выполнить обрезку (), вручную не выполняя итерации через каждый объект? Я ищу что-то как 'разделение следующими символами и автоматически обрезаю каждый результат'.

А-ч, immediatly прежде, чем отправить я нашел

List parts = line.Split(';').Select(p => p.Trim()).ToList();

в том, Как я могу разделить и обрезать строку в части все на одной строке?

Тем не менее мне любопытно: могло бы быть лучшее решение этого? (Или компилятор, вероятно, преобразовал бы их в тот же вывод кода как Linq-операция?)

52
задан Community 23 May 2017 в 02:10
поделиться

5 ответов

Другой возможный вариант (который избегает LINQ, к лучшему или худшему):

string line = " abc, foo  ,     bar";
string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim());

Однако, если вам просто нужно знать, есть ли он - возможно, короткое замыкание?

bool contains = line.Split(',').Any(p => p.Trim() == match);
81
ответ дан 7 November 2019 в 09:22
поделиться

Если пробелы просто окружают слова в строке, разделенной запятыми, это сработает:

var keyword = " abc, foo  ,     bar";
var array = keyword.Replace(" ", "").Split(',');
if (array.Contains("foo"))
{
    Debug.Print("Match");
}
4
ответ дан 7 November 2019 в 09:22
поделиться

Попробуйте следующее:

string keyword = " abc, foo  ,     bar";
string match = "foo";
string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*");
if (split.Contains(match))
{
    // do stuff
}
3
ответ дан 7 November 2019 в 09:22
поделиться

Я бы предложил использовать регулярные выражения на исходной строке, ищу шаблон "любое количество пробелов, за которым следует один из ваших разделителей, а затем один или несколько пробелов" и удаляю эти пробелы. Затем разделите.

3
ответ дан 7 November 2019 в 09:22
поделиться

Вы найдете множество различных методов для этого, и изменение производительности и точности не будет легко заметить. Я бы порекомендовал подключить их все в тестовом комплекте типа NUnit, чтобы найти, какой из них выходит на вершину, а какой точный.

Используйте в циклах маленькие, средние и большие количества текста для изучения различных ситуаций.

1
ответ дан 7 November 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: