Как разбить строки на возврат каретки с C #? - PullRequest
56 голосов
/ 29 ноября 2009

У меня есть страница ASP.NET с многострочным текстовым полем с именем txbUserName. Затем я вставляю в текстовое поле 3 названия, и они выровнены по вертикали:

  • Jason
  • Ammy
  • Karen

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

спасибо.

Ответы [ 7 ]

124 голосов
/ 29 ноября 2009
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

Это относится как к \ n, так и к \ r \ n символам новой строки и удаляет все пустые строки, которые могут ввести ваши пользователи.

Я тестировал, используя следующий код:

        string test = "PersonA\nPersonB\r\nPersonC\n";
        string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
        foreach (string s in result)
            Console.WriteLine(s);

И все работает правильно, разбившись на массив из трех строк с записями «PersonA», «PersonB» и «PersonC».

7 голосов
/ 29 ноября 2009

Замените все \r\n на \n, затем разделите, используя \n:

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
4 голосов
/ 29 ноября 2009

Посмотрите на функцию String.Split (не уверен в точном синтаксисе, нет IDE передо мной).

string[] names = txbUserName.Text.Split(Environment.Newline);
1 голос
/ 20 октября 2011
using System.Text;
using System.Text.RegularExpressions;


 protected void btnAction_Click(object sender, EventArgs e)
    {
        string value = txtDetails.Text;
        char[] delimiter = new char[] { ';','[' };
        string[] parts = value.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < parts.Length; i++)
        {
            txtFName.Text = parts[0].ToString();
            txtLName.Text = parts[1].ToString();
            txtAge.Text = parts[2].ToString();
            txtDob.Text = parts[3].ToString();
        }
    }
1 голос
/ 29 ноября 2009

String.Split

mystring.Split(new Char[] { '\n' })
0 голосов
/ 08 января 2019

Это зависит от того, что вы хотите сделать. Другой вариант, который, вероятно, является избыточным для небольших списков, но может быть более эффективным для памяти для больших строк, - это использовать класс StringReader и использовать перечислитель:

IEnumerable<string> GetNextString(string input)
{
    using (var sr = new StringReader(input))
    {
        string s;
        while ((s = sr.ReadLine()) != null)
        {
            yield return s;
        }
    }
}

Поддерживает оба конца строки \n и \r\n. Поскольку он возвращает IEnumerable, вы можете обработать его с foreach или использовать любое из стандартных расширений linq (ToList(), ToArray(), Where и т. Д.).

Например, с foreach:

var ss = "Hello\nworld\r\ntwo bags\r\nsugar";
foreach (var s in GetNextString(ss))
{
    Console.WriteLine("==> {0}", s);
}
0 голосов
/ 21 апреля 2017

Попробуйте это:

message.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

Работает, если:

var message = "test 1\r\ntest 2";

Или

var message = "test 1\ntest 2";

Или

var message = "test 1\rtest 2";
...