2016-12-24 27 views
5

próbuję przyciąć ciąg z String.TrimDlaczego String.Trim nie przycina średnika?

split[2].Trim(';') 

ale dostaję wynik:

System; 

zamiast

System 

Próbowałem też za pomocą

split[2].TrimEnd(';') 

, ale nadal zwraca ten sam wynik.

Także jeśli robię

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

uzyskać

ystem; 

jestem naprawdę mylić, dlaczego tak się dzieje. Czy to możliwe, ponieważ średnik nie jest ostatnim znakiem w ciągu znaków?

Oto pełny kod:

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 Niedawno widziałem komentarz, że zauważyłem, że mój pętli while było bezcelowe. To prawda, ale jest to "WIP", a nie wersja ostateczna.

+1

Proszę sprawdzić długość zwracanego ciągu. Może ';' nie jest końcową postacią. – derM

+0

co się dzieje w tej pętli? zawsze łamiesz po jednej rundzie, więc dlaczego tego potrzebujesz? – Staeff

+0

@Staeff To jeszcze nie koniec, zamierzam usunąć przerwę w pierwszym poleceniu if. – TheMCProgrammer

Odpowiedz

3

Wymień następujący wiersz:

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

z tym:

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

ten zastąpi żadnych znaków powrotu karetki tylko z nowej linii, usuwanie możliwość, że końcowe \r może być przyczyną problemu.

+6

W odniesieniu do .net core prawdopodobnie lepiej jest użyć Enviornment.NewLine() zamiast "\ r \ n" (btw, ponieważ jego dwa znaki nie będą mogły być użyte jako pojedynczy znak) – Staeff

+0

Na wypadek, gdyby ktoś się pomylił, 'Environment.NewLine()' działa niezależnie od tego, czy używasz .NET Core. Jednak, jak zauważyło @Staeff, w kontekście .NET Core jest platformą wieloplatformową, ważne jest, aby nie zakładać, że '\ r \ n' jest zawsze tym, jak linie są kończone. –

0

Jeśli ta odpowiedź jest błędna, usunę ją. Ponieważ informacje są skąpe, jest to tylko dzikie domysły.

Wstawianie

split[2].Trim() 

prawo befor

split[2].Trim(';') 

najprawdopodobniej rade.

Jeśli nie, ale wiesz, że ostatni znak to ;, a chcesz się go pozbyć, możesz po prostu pokroić tablicę. To będzie prawdopodobnie bardziej efektywne, ponieważ nie musiałby porównać żadnych znaków, podczas gdy jest to najprawdopodobniej wykonane co najmniej dwa razy, jeśli używasz TrimEnd lub trzykrotnie jeśli yous Trim