2016-12-24 18 views
5

Tôi đang cố gắng để cắt một chuỗi với String.TrimTại sao String.Trim không cắt tỉa một dấu chấm phẩy?

split[2].Trim(';') 

nhưng tôi nhận được kết quả của:

System; 

thay vì

System 

Tôi cũng đã cố gắng sử dụng

split[2].TrimEnd(';') 

nhưng nó vẫn trả về kết quả tương tự.

Ngoài ra nếu tôi làm

split[2].Trim('S', ';') 

tôi nhận được

ystem; 

Tôi thực sự bối rối tại sao điều này đang xảy ra. Có thể vì dấu chấm phẩy không phải là ký tự cuối cùng trong chuỗi?

Đây là mã đầy đủ:

string line = @" 
using System; 
using System.Windows.Forms; 
class HelloWorld 
{ 
    static void Main() 
    { 
#if DebugConfig 
     Console.WriteLine("WE ARE IN THE DEBUG CONFIGURATION"); 
#endif 

     Console.WriteLine("Hello, world!"); 
     DialogResult result; 
     result = MessageBox.Show("Itsyeboi", "Yup", MessageBoxButtons.YesNo); 
     if (result == DialogResult.Yes) 
     { 
      Console.WriteLine("Yes"); 
      Console.ReadLine(); 
     } 
     else 
     { 
      Console.WriteLine("No"); 
      Console.ReadLine(); 
     } 

    } 
}" 
string[] split = line.Split(' ', '\n'); 
while (true) 
{ 
    if (split[counter4] == "using") 
    { 
     richTextBox1.Text = split[1].Trim(';'); 
     break; 
    } 
    else 
    { 
      richTextBox1.Text = line; 
     break; 
    } 
} 

FYI Gần đây tôi đã nhìn thấy một bình luận mà nhận thấy rằng vòng lặp while của tôi là vô nghĩa. Đúng, nhưng nó là "WIP" và không phải là phiên bản cuối cùng.

+1

Vui lòng kiểm tra độ dài của chuỗi được trả về. Có lẽ ';' không phải là ký tự dấu. – derM

+0

điều gì sẽ xảy ra trong vòng lặp đó? bạn luôn luôn phá vỡ sau một vòng vậy tại sao bạn thậm chí cần nó? – Staeff

+0

@Staeff Chưa hoàn thành, tôi sẽ xóa dấu ngắt trong câu lệnh if đầu tiên. – TheMCProgrammer

Trả lời

3

Thay thế dòng sau:

string[] split = line.Split(' ', '\n'); 

với điều này:

string[] split = line.Replace("\r\n", "\n").Split(' ', '\n'); 

này sẽ thay thế bất kỳ kí tự xuống dòng nhân vật chỉ xuống dòng, loại bỏ khả năng rằng một trailing \r có thể gây ra vấn đề của bạn.

+6

Đối với lõi .net có lẽ là thích hợp hơn để sử dụng Enviornment.NewLine() thay vì "\ r \ n" (btw vì hai ký tự của nó, bạn sẽ không thể sử dụng nó như một char đơn) – Staeff

+0

Chỉ trong trường hợp bất kỳ ai bị nhầm lẫn, 'Environment.NewLine()' hoạt động bất kể bạn đang sử dụng .NET Core. Nhưng như @Staeff đã chỉ ra, trong bối cảnh .NET Core là nền tảng chéo, điều quan trọng là không giả sử rằng '\ r \ n' luôn là cách các dòng được kết thúc. –

0

Nếu câu trả lời này sai, tôi sẽ xóa nó. Vì thông tin thưa thớt, đây chỉ là một phỏng đoán hoang dã.

Chèn một

split[2].Trim() 

đúng befor các

split[2].Trim(';') 

rất có thể sẽ làm các trick.

Nếu không, nhưng bạn biết char cuối cùng là ; và bạn chỉ muốn loại bỏ điều này, bạn cũng có thể chỉ cắt mảng của mình. Điều này có lẽ sẽ hiệu quả hơn, vì bạn sẽ không cần phải so sánh bất kỳ ký tự, trong khi điều này rất có thể được thực hiện ít nhất hai lần nếu bạn sử dụng TrimEnd hoặc ba lần nếu bạn yous Trim

Các vấn đề liên quan