2009-11-29 46 views
49

我有一个称为txbUserName的多行文本框的ASP.NET页面。然后我粘贴到文本框3名,他们是垂直对齐:如何拆分字符串回车与C#?

  • 杰森
  • 书童
  • 卡伦

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

谢谢。

回答

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

而且它工作正常,分裂成三个字符串数组的条目“假面”,“PersonB”和“PersonC”。

+4

有保证,这将通过\ -N,留下不先拆\ r \ n减少到用\ r? – spender 2009-11-29 03:47:31

+0

我很确定它不会。我在我的应用程序中使用此行,它一次用于解析剪贴板(某种程度上用户需要Windows上的UNIX行结束符......)。但是,如果是这样,我想像颠倒字符串数组参数中的字符串可以解决这个问题。有谁知道如何生成这两个组合来测试? – jasonh 2009-11-29 03:50:10

+7

@jasonh:“我很确定”......着名的遗言。 :) – 2009-11-29 03:56:04

4

看看在String.Split功能(不知道确切的语法的,在我面前没有IDE)。

string[] names = txbUserName.Text.Split(Environment.Newline); 
+2

Environment.Newline是服务器环境的“换行”表示,它不控制用户可以输入的内容,是吗? – 2009-11-29 03:55:43

+0

如果一个常量可以控制用户可以输入的内容,那么我会购买更多微软股票......一大堆*更多。 – TryCatch 2009-11-29 04:03:34

+0

FWIW - 最好使用“\ r”和/或“\ n”,我的回答更多地关注“仅使用.split”来打破字符串。很高兴你不必在C中写入.split并自己管理内存和指针!年轻的whipper-snappers变得容易我告诉你。 – TryCatch 2009-11-29 04:08:34

5

更换任何\r\n\n,然后分割使用\n

string[] arr = txbUserName.Text.Replace("\r\n", "\n").Split("\n".ToCharArray()); 
+0

为什么不使用'new char [] {'\ n'}'? – 2009-11-29 04:01:38

+0

@Matthew:旧的习惯很难:P – 2009-11-29 04:03:07

+2

@Matthew,@ o.k.w:甚至只是使用Split('\ n')',因为分隔符数组是一个'params'参数。 – LukeH 2009-11-29 10:14:33

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(); 
     } 
    } 
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";