Разделение строк с помощью среды.Newline оставляет n в большинстве элементов массива?
Я MyString.Split(Environment.Newline.ToCharArray()[0])
чтобы разделить мою строку из файла на разные части. Но каждый элемент в массиве, кроме первого, начинается с N после того, как я это сделал? Я знаю, что способ, которым я разделяюсь на новые строки, является своего рода" обманчивым " из-за отсутствия лучшего слова, поэтому, если есть лучший способ сделать это, пожалуйста, скажите мне...
вот файл...
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 ... "))
{
}