2009-11-29 43 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";