2016-12-24 3 views
5

Je suis en train de découper une chaîne avec String.TrimPourquoi String.Trim ne supprime-t-il pas un point-virgule?

split[2].Trim(';') 

mais je reçois le résultat de:

System; 

au lieu de

System 

J'ai essayé également d'utiliser

split[2].TrimEnd(';') 

mais il renvoie toujours le même résultat.

Aussi, si je

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

Je reçois

ystem; 

Je suis vraiment confus pourquoi cela se passe. Serait-ce parce que le point-virgule n'est pas le dernier caractère de la chaîne?

Voici le code complet:

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; 
    } 
} 

Pour votre information, j'ai vu récemment un commentaire qui a remarqué que ma boucle while était inutile. C'est vrai, mais c'est "WIP" et non la version finale.

+1

Veuillez vérifier la longueur de la chaîne renvoyée. Peut-être que le ';' n'est pas le caractère final. – derM

+0

ce qui se passe même dans cette boucle tout en même temps? vous vous cassez toujours après un tour, alors pourquoi en avez-vous besoin? – Staeff

+0

@Staeff Ce n'est pas encore fini, je vais supprimer la pause dans la première instruction if. – TheMCProgrammer

Répondre

3

Remplacer la ligne suivante:

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

avec ceci:

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

cela remplacera les retours chariot avec des personnages tout saut de ligne, en supprimant la possibilité qu'un \r de fuite peut être la cause de votre problème.

+6

En ce qui concerne le noyau .net, il est probablement préférable d'utiliser Enviornment.NewLine() au lieu de "\ r \ n" (btw puisque ses deux caractères, vous ne pourrez pas l'utiliser comme un seul char) – Staeff

+0

Juste au cas où quelqu'un serait confus, 'Environment.NewLine()' fonctionne indépendamment du fait que vous utilisez .NET Core. Mais comme l'a souligné @Staeff, dans le contexte de .NET Core étant multi-plateforme, il est important de ne pas supposer que '\ r \ n' est toujours la façon dont les lignes sont terminées. –

0

Si cette réponse est erronée, je vais l'effacer. Comme l'information est clairsemée, ce n'est qu'une supposition sauvage.

Insertion d'une

split[2].Trim() 

droit befor le

split[2].Trim(';') 

sera très probablement faire l'affaire.

Si ce n'est pas le cas, mais que vous savez que le dernier caractère est un ; et que vous voulez seulement vous en débarrasser, vous pouvez également découper votre tableau. Ce serait sans doute plus efficace, comme vous auriez pas besoin de comparer les caractères, alors que cela est très probablement au moins deux fois si vous utilisez TrimEnd ou trois fois si vous yous Trim