Лучший способ указать пробелы в операции String.Split

Я разделяю строку на основе пробелов следующим образом:

string myStr = "The quick brown fox jumps over the lazy dog"; char[] whitespace = new char[] { ' ', '\t' }; string[] ssizes = myStr.Split(whitespace); 

Мне очень сложно определять массив char [] везде в моем коде, я хочу это сделать. Есть ли более эффективный способ, который не требует создания массива символов (который подвержен ошибкам при копировании в разных местах)?

Если вы просто позвоните:

 string[] ssize = myStr.Split(null); 

или:

 string[] ssize = myStr.Split(new char[0]); 

то предполагается, что пустое пространство является характером расщепления. На странице документации метода string.Split(char[]) .

Если параметр разделителя равен null или не содержит символов, предполагается, что символы пробела являются разделителями. Символы белого пространства определяются стандартом Unicode и возвращают true если они передаются методу Char.IsWhiteSpace .

Всегда, всегда, всегда читайте документацию!

Да, здесь нужен еще один ответ!

Все решения до сих пор затрагивают довольно ограниченную область канонического ввода , а именно: единый символ пробела между элементами (хотя наконечник шляпы для @cherno, по крайней мере, упоминает проблему). Но я утверждаю, что во всех, кроме самых неясных сценариях, разделение всех этих результатов должно давать одинаковые результаты:

 string myStrA = "The quick brown fox jumps over the lazy dog"; string myStrB = "The quick brown fox jumps over the lazy dog"; string myStrC = "The quick brown fox jumps over the lazy dog"; string myStrD = " The quick brown fox jumps over the lazy dog"; 

String.Split (в любом из вкусов, показанных во всех других ответах здесь) просто не работает, если вы не присоедините параметр RemoveEmptyEntries ни с одним из них:

 myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries) myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries) 

Как показывает иллюстрация, при отсутствии функции RemoveEmptyEntries при отсутствии опции исключить четыре различных результата (обозначенные A, B, C и D) по сравнению с единственным результатом из всех четырех входов:

String.Split vs Regex.Split

Конечно, если вам не нравятся варианты, просто используйте альтернативу regex 🙂

 Regex.Split(myStr, @"\s+").Where(s => s != string.Empty) 

Согласно документации :

Если параметр разделителя равен нулю или не содержит символов, предполагается, что символы пробела являются разделителями. Символы белого пространства определяются стандартом Unicode и возвращают true, если они передаются методу Char.IsWhiteSpace.

Поэтому просто вызовите myStr.Split(); Нет необходимости передавать что-либо, потому что separator – это массив params .

Почему вы не используете ?:

 string[] ssizes = myStr.Split(' ', '\t'); 

Обратите внимание, что смежные пробелы НЕ будут рассматриваться как один разделитель, даже если используется String.Split(null) . Если какой-либо из ваших токенов разделен несколькими пробелами или вкладками, вы получите пустые строки, возвращаемые в вашем массиве.

Из документации:

Каждый элемент разделителя определяет отдельный символ разделителя. Если два разделителя смежны, или разделитель найден в начале или конце этого экземпляра, соответствующий элемент массива содержит Empty.

Так что не копируйте и не вставляйте! Извлеките функцию для разделения и повторного использования.

 public static string[] SplitWhitespace (string input) { char[] whitespace = new char[] { ' ', '\t' }; return input.Split(whitespace); } 

Повторное использование кода – ваш друг.

Почему бы вам просто не сделать это:

 var ssizes = myStr.Split(" \t".ToCharArray()); 

Кажется, есть метод String.ToCharArray() в .NET 4.0!

EDIT: Как указал VMAtm, этот метод уже существовал в .NET 2.0!

Вы можете просто сделать:

 string myStr = "The quick brown fox jumps over the lazy dog"; string[] ssizes = myStr.Split(' '); 

MSDN имеет больше примеров и ссылок:

http://msdn.microsoft.com/en-us/library/b873y76a.aspx

Вы не можете сделать это inline?

 var sizes = subject.Split(new char[] { ' ', '\t' }); 

В противном случае, если вы часто это делаете, вы всегда можете создать константу или что-то, что содержит этот массив символов.

Как отмечали другие, вы можете в соответствии с документацией также использовать null или пустой массив. Когда вы это сделаете, он будет автоматически использовать пробельные символы.

 var sizes = subject.Split(null); 

Если повторение одного и того же кода является проблемой, напишите метод расширения в classе String, который инкапсулирует логику разделения.

  • Как интерполировать строки?
  • Преобразование строки в имя переменной
  • Найти и извлечь номер из строки
  • Как найти числа из строки?
  • Android-образец Bluetooth-кода для отправки простой строки через bluetooth
  • Количество слов в строке Swift для вычисления количества слов
  • Преобразование строки в строковый массив в java
  • Почему символ \ удваивается в моей строке @?
  • Создание списка, разделенного запятыми, из IList или IEnumerable
  • Вложенные круглые скобки
  • Каков наилучший способ рекурсивного преобразования строки в Java?
  • Давайте будем гением компьютера.