How to split strings on carriage return with C#?

2019-01-21 16:17发布

I have an ASP.NET page with a multiline textbox called txbUserName. Then I paste into the textbox 3 names and they are vertically aligned:

  • Jason
  • Ammy
  • Karen

I want to be able to somehow take the names and split them into separate strings whenever i detect the carriage return or the new line. i am thinking that an array might be the way to go. Any ideas?

thank you.

7条回答
我命由我不由天
2楼-- · 2019-01-21 16:17

It depends what you want to do. Another option, which is probably overkill for small lists, but may be more memory efficient for larger strings, is to use the StringReader class and use an enumerator:

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

This supports both \n and \r\n line-endings. As it returns an IEnumerable you can process it with a foreach, or use any of the standard linq extensions (ToList(), ToArray(), Where, etc).

For example, with a foreach:

var ss = "Hello\nworld\r\ntwo bags\r\nsugar";
foreach (var s in GetNextString(ss))
{
    Console.WriteLine("==> {0}", s);
}
查看更多
forever°为你锁心
3楼-- · 2019-01-21 16:18

Replace any \r\n with \n, then split using \n:

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
查看更多
一夜七次
4楼-- · 2019-01-21 16:20

String.Split?

mystring.Split(new Char[] { '\n' })
查看更多
我命由我不由天
5楼-- · 2019-01-21 16:20

Try this:

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

Works if :

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

Or

var message = "test 1\ntest 2";

Or

var message = "test 1\rtest 2";
查看更多
姐就是有狂的资本
6楼-- · 2019-01-21 16:23
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();
        }
    }
查看更多
戒情不戒烟
7楼-- · 2019-01-21 16:25
string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

This covers both \n and \r\n newline types and removes any empty lines your users may enter.

I tested using the following code:

        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);

And it works correctly, splitting into a three string array with entries "PersonA", "PersonB" and "PersonC".

查看更多
登录 后发表回答