2009-12-30 40 views
45

Tôi đang cố gắng để tồn tại chuỗi từ một văn bản ASP.NET. Tôi cần phải loại bỏ các nguồn cấp dữ liệu dòng vận chuyển trở lại và sau đó chia nhỏ bất cứ điều gì còn lại thành một mảng chuỗi gồm 50 ký tự.Làm cách nào để xóa " r n" khỏi chuỗi trong C#? Tôi có thể sử dụng regEx không?

Tôi có điều này cho đến nay

var commentTxt = new string[] { }; 
var cmtTb = GridView1.Rows[rowIndex].FindControl("txtComments") as TextBox; 
if (cmtTb != null) 
    commentTxt = cmtTb.Text.Length > 50 
     ? new[] {cmtTb.Text.Substring(0, 50), cmtTb.Text.Substring(51)} 
     : new[] {cmtTb.Text}; 

Nó hoạt động ok, nhưng tôi không tước ra các nhân vật CRLF. Làm thế nào để tôi làm điều này một cách chính xác?

Cảm ơn, ~ ck ở San Diego

Trả lời

84

Bạn có thể sử dụng một regex, vâng, nhưng một string.Replace đơn giản() có thể sẽ đủ.

myString = myString.Replace("\r\n", string.Empty); 
+48

Better có thể được 'myString.Replace ("\ r", string.Empty) .Replace (" \ n ", string.Empty);', cho rằng các chuỗi trong tự nhiên có thể có rất nhiều sắp xếp CR/LF. –

+1

Nó sẽ không tốt hơn để sử dụng Enviroment.Newline ??? – PostMan

+6

Environment.NewLine sẽ là ý tưởng của máy chủ về dòng mới. Văn bản này đến từ khách hàng, có thể sử dụng các ký tự khác nhau cho dòng mới. Đây là câu trả lời cho thấy những trình duyệt khác nhau sử dụng cho các dòng mới: http://stackoverflow.com/questions/1155678/javascript-string-newline-character/1156388#1156388 –

1

Giả sử bạn muốn thay thế các dòng mới với một cái gì đó để một cái gì đó như thế này:

the quick brown fox\r\n 
jumped over the lazy dog\r\n 

không kết thúc như thế này:

the quick brown foxjumped over the lazy dog 

tôi muốn làm một cái gì đó như thế này:

string[] SplitIntoChunks(string text, int size) 
{ 
    string[] chunk = new string[(text.Length/size) + 1]; 
    int chunkIdx = 0; 
    for (int offset = 0; offset < text.Length; offset += size) 
    { 
     chunk[chunkIdx++] = text.Substring(offset, size); 
    } 
    return chunk; 
}  

string[] GetComments() 
{ 
    var cmtTb = GridView1.Rows[rowIndex].FindControl("txtComments") as TextBox; 
    if (cmtTb == null) 
    { 
     return new string[] {}; 
    } 

    // I assume you don't want to run the text of the two lines together? 
    var text = cmtTb.Text.Replace(Environment.Newline, " "); 
    return SplitIntoChunks(text, 50);  
} 

Tôi xin lỗi nếu cú ​​pháp không hoàn hảo; Tôi không có máy C# có sẵn ngay bây giờ.

18

Việc này chia chuỗi trên bất kỳ tổ hợp ký tự dòng mới nào và kết hợp chúng với dấu cách, giả sử bạn thực sự muốn không gian nơi các dòng mới sẽ có.

var oldString = "the quick brown\rfox jumped over\nthe box\r\nand landed on some rocks."; 
var newString = string.Join(" ", Regex.Split(oldString, @"(?:\r\n|\n|\r)")); 
Console.Write(newString); 

// prints: 
// the quick brown fox jumped over the box and landed on some rocks. 
+0

Sự lựa chọn tốt hơn ... bao giờ hết! –

+0

Cảm ơn bạn đã cứu tôi rất nhiều thời gian! – Munchies

+0

Điều này đã giúp tôi nhiều nhất. – OneHoopyFrood

33

.Trim() sẽ thực hiện tất cả công việc cho bạn!

Tôi đã thử mã ở trên nhưng sau khi "cắt" chức năng, và tôi nhận thấy tất cả của nó "sạch" ngay cả trước khi nó đạt đến mã thay thế!

String input:  "This is an example string.\r\n\r\n" 
Trim method result: "This is an example string." 

Nguồn: http://www.dotnetperls.com/trim

+11

-1 Vì điều này chỉ hoạt động cho đầu và cuối của một chuỗi. – im1dermike

+1

@ im1dermike Tôi nghĩ rằng một downvote là một chút không cần thiết, tôi chỉ tìm thấy điều này và sử dụng nó, chắc chắn là lựa chọn tốt nhất cho trường hợp của tôi –

+3

@SeanMissingham Chỉ vì một câu trả lời không đủ hiệu quả cho bạn không có nghĩa đó là một câu trả lời hay. – im1dermike

14

đang đẹp hơn cho việc này:

yourstring = yourstring.Replace(System.Environment.NewLine, string.Empty); 
+0

THANX..it Đã làm việc –

+9

-1: điều này chỉ hoạt động nếu văn bản được tạo trong cùng một môi trường. –

2

Hãy thử điều này:

private void txtEntry_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      string trimText; 

      trimText = this.txtEntry.Text.Replace("\r\n", "").ToString(); 
      this.txtEntry.Text = trimText; 
      btnEnter.PerformClick(); 
     } 
    } 
+1

Sử dụng Thay thế ("\ r", "") .Đặt lại ("\ n", "") để hỗ trợ một phạm vi rộng hơn của nền cuối cụ thể của các chuỗi dòng. –

1

Dưới đây là phương pháp hoàn hảo

Xin lưu ý rằng Môi trường.NewLine hoạt động trên các nền tảng Microsoft.

Ngoài ở trên, bạn cần phải thêm \ r\ n trong một riêng biệt chức năng!

Đây là mã mà sẽ hỗ trợ cho dù bạn gõ trên Linux, Windows hay Mac

  var stringTest = "\r Test\nThe Quick\r\n brown fox"; 
      Console.WriteLine("Original is:"); 
      Console.WriteLine(stringTest); 
      Console.WriteLine("-------------"); 
      stringTest = stringTest.Trim().Replace("\r", string.Empty); 
      stringTest = stringTest.Trim().Replace("\n", string.Empty); 
      stringTest = stringTest.Replace(Environment.NewLine, string.Empty); 
      Console.WriteLine("Output is : "); 
      Console.WriteLine(stringTest); 
      Console.ReadLine(); 
Các vấn đề liên quan