Разделение строк с помощью среды.Newline оставляет n в большинстве элементов массива?

Я MyString.Split(Environment.Newline.ToCharArray()[0]) чтобы разделить мою строку из файла на разные части. Но каждый элемент в массиве, кроме первого, начинается с N после того, как я это сделал? Я знаю, что способ, которым я разделяюсь на новые строки, является своего рода" обманчивым " из-за отсутствия лучшего слова, поэтому, если есть лучший способ сделать это, пожалуйста, скажите мне...

вот файл... enter image description here

2 ответов


Если вы хотите поддерживать использование .Split() вместо того, чтобы читать файл в строке за раз, вы можете это сделать...

var splitResult = MyString.Split( new string[]{ System.Environment.NewLine },
    System.StringSplitOptions.RemoveEmptyEntries  );
    /* or System.StringSplitOptions.None if you want empty results as well */

EDIT:

проблема, с которой вы столкнулись, заключается в том, что в среде, отличной от unix, новая строка "символ" на самом деле состоит из двух символов. Поэтому, когда вы схватили нулевой индекс, вы фактически разделились на возврат кареты...не символ новой строки (\п).

Windows = "\r\n"

Unix = "\n"

в http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx


новая строка в Windows состоит из двух символов (\r и \n). The Environment.Newline.ToCharArray()[0] выражение указывает только один из этих символов: \r. Поэтому другой символ (\n) остается частью разделенной строки.

Я предлагаю вам читать файл, используя что-то вроде этого:

public IEnumerable<string> ReadFile(string filePath)
{
   using (StreamReader rdr = new StreamReader(filePath))
   {
       string line;
       while ( (line = reader.ReadLine()) != null)
       {
          yield return line;
       }
   }
}

вам может потребоваться больше обработки ошибок, или указать другой параметр открытия файла, или передать поток в метод, а не путь, но идея использования итератора над ReadLine() метод-это звук. В результате вы можете просто использовать такой код:

 foreach (string line in ReadLine(" ... my file path ... "))
 {

 }