Я разделяю строку на основе пробелов следующим образом:
string myStr = "The quick brown fox jumps over the lazy dog";
char[] whitespace = new char[] { ' ', '\t' };
string[] ssizes = myStr.Split(whitespace);
Утомительно определять массив char [] везде в моем коде, я хочу сделать это. Есть ли более эффективный способ, который не требует создания массива символов (который подвержен ошибкам при копировании в разные места)?
Ответы:
Если вы просто позвоните:
или:
тогда предполагается, что пробел является символом расщепления. Со
string.Split(char[])
страницы документации метода .Всегда, всегда, всегда читайте документацию!
источник
(char[])null
немного лучше, так как избегает создания нового объекта. (Вы не можете использоватьnull
с любой изoptions
перегрузок).null
, вам все равно нужно указатьStringSplitOption.RemoveEmptyEntries
или они по умолчанию игнорируются?Да, здесь нужен еще один ответ!
Пока что все решения направлены на довольно ограниченную область канонического ввода , а именно: один символ пробела между элементами (хотя на кону @cherno хотя бы упомянул проблему). Но я утверждаю, что во всех сценариях, кроме самых неясных, их разделение должно давать одинаковые результаты:
String.Split
(в любом из вариантов, показанных в других ответах здесь) просто не будет работать хорошо, если вы не добавитеRemoveEmptyEntries
один из следующих вариантов:Как показано на иллюстрации, если вы не укажете эту опцию, вы получите четыре разных результата (помеченных как A, B, C и D) по сравнению с одним результатом для всех четырех входов при использовании
RemoveEmptyEntries
:Конечно, если вам не нравится использование опций, просто используйте альтернативу регулярному выражению :-)
источник
CapitalizeEveryWord("This is line one.\n \nThis is line three.")
.Where(s => s != string.Empty)
в Regex. Поскольку вы указываете\s+
(любое количество пробелов), между ними не может быть пустых элементов.Согласно документации :
Так что просто позвоните.
myStr.Split();
Нет необходимости передавать что-либо, потому что разделитель - этоparams
массив.источник
Почему вы не используете ?:
источник
Обратите внимание, что соседние пробелы НЕ будут рассматриваться как один разделитель, даже при использовании
String.Split(null)
. Если какие-либо из ваших токенов разделены несколькими пробелами или табуляциями, вы получите пустые строки, возвращенные в ваш массив.Из документации:
источник
Так что не копируйте и не вставляйте! Извлеките функцию для разделения и используйте ее снова.
Повторное использование кода ваш друг.
источник
Почему бы тебе просто не сделать это:
Кажется, есть способ
String.ToCharArray()
в .NET 4.0!РЕДАКТИРОВАТЬ: Как указал VMAtm, метод уже существовал в .NET 2.0!
источник
ты можешь использовать
разбить строку.
источник
Разве вы не можете сделать это встроенным?
В противном случае, если вы будете делать именно это часто, вы всегда можете создать константу или что-то, содержащее этот массив символов.
Как отметили другие, вы можете в соответствии с документацией также использовать
null
или пустой массив. Когда вы это сделаете, он будет автоматически использовать пробельные символы.источник
Если повторение того же кода является проблемой, напишите метод расширения в классе String, который инкапсулирует логику разделения.
источник
Вы можете просто сделать:
MSDN имеет больше примеров и ссылок:
http://msdn.microsoft.com/en-us/library/b873y76a.aspx
источник