Как разбить строки на возврат каретки с помощью С#?
У меня есть страница ASP.NET с многострочным текстовым полем, называемым txbUserName. Затем я вставляю в имена текстового поля 3 и выравнивается по вертикали:
Я хочу иметь возможность как-то взять имена и разделить их на отдельные строки всякий раз, когда я обнаруживаю возврат каретки или новую строку. Я думаю, что массив может быть способ пойти.
Любые идеи?
Благодарю вас.
Ответы
Ответ 1
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
Это охватывает типы \n и\r\n newline и удаляет любые пустые строки, которые могут ввести ваши пользователи.
Я тестировал, используя следующий код:
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".
Ответ 2
Замените любой \r\n
на \n
, затем разделите с помощью \n
:
string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
Ответ 3
Посмотрите на функцию String.Split(не уверен в точном синтаксисе, нет IDE передо мной).
string[] names = txbUserName.Text.Split(Environment.Newline);
Ответ 4
String.Split
?
mystring.Split(new Char[] { '\n' })
Ответ 5
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();
}
}
Ответ 6
Попробуйте следующее:
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";
Ответ 7
Это зависит от того, что вы хотите сделать. Другой вариант, который, вероятно, является избыточным для небольших списков, но может быть более эффективным для памяти для больших строк, - это использовать класс 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);
}