64

我有一个带有名为 txbUserName 的多行文本框的 ASP.NET 页面。然后我将 3 个名称粘贴到文本框中,它们垂直对齐:

  • 杰森
  • 艾米
  • 凯伦

每当我检测到回车或换行时,我希望能够以某种方式获取名称并将它们拆分为单独的字符串。我在想一个数组可能是要走的路。有任何想法吗?

谢谢你。

4

7 回答 7

141
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”。

于 2009-11-29T03:40:01.643 回答
7

将 any 替换\r\n\n,然后使用 拆分\n

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray());
于 2009-11-29T03:53:29.480 回答
4

看一下 String.Split 函数(不确定确切的语法,我面前没有 IDE)。

string[] names = txbUserName.Text.Split(Environment.Newline);
于 2009-11-29T03:41:22.833 回答
1

String.Split?

mystring.Split(new Char[] { '\n' })
于 2009-11-29T03:40:14.373 回答
1
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();
        }
    }
于 2011-10-20T06:22:05.167 回答
0

试试这个:

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";
于 2017-04-21T09:25:35.620 回答
0

这取决于你想做什么。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您可以使用 a 处理它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);
}
于 2019-01-08T20:51:26.907 回答