Suppression du retour chariot et de la nouvelle ligne à la fin d'une chaîne en c #


113

Comment supprimer le caractère de retour chariot (\r)et le caractère (\n)de nouvelle ligne à la fin d'une chaîne?

Réponses:


198

Cela supprimera toute combinaison de retours chariot et de retours à la ligne à partir de la fin de s:

s = s.TrimEnd(new char[] { '\r', '\n' });

Edit : Ou comme JP le souligne gentiment, vous pouvez l'épeler plus succinctement comme suit:

s = s.TrimEnd('\r', '\n');

10
Prenez note du mot clé params dans la déclaration de TrimEnd, il vous permet de passer plusieurs instances d'un caractère au lieu du tableau. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
— JP Alioto

3
Que diriez-vous de ceci: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
— Ε Г И І И О

4
J'écris c # depuis la sortie de la v1.0 (il y a 10 ans). Maintenant, parlez-moi de TrimEnd. Doh!
— s15199d

7
Juste par intérêt, tout ce dont vous avez vraiment besoin est s = s.TrimEnd()- comme le disent les documents: si trimChars est nul ou un tableau vide, les caractères d'espacement Unicode sont supprimés à la place. - voir String.TrimEnd
— Stuart Wood

@StuartWood: ... ce n'est pas ce qu'Avik a demandé. Il a demandé spécifiquement '\r'et '\n'et rien d'autre, pas le caractère d'espace ' 'par exemple.
— RichieHindle

31

Cela devrait fonctionner ...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );

19

Si vous utilisez plusieurs plates-formes, vous êtes plus en sécurité en utilisant cette méthode.

value.TrimEnd(System.Environment.NewLine.ToCharArray());

Il tiendra compte des différents caractères de retour à la ligne et de retour chariot.


La méthode de JP - tst.TrimEnd( '\r', '\n' )- est raisonnablement "sûre" dans la pratique puisque les principaux EOL ne sont [actuellement] que des combinaisons différentes de \ret \n, mais alexw est la "bonne" réponse. Laissez le CLR vous dire quels caractères sont dans la nouvelle ligne de cette plate-forme. EOL n'a pas toujours été des combos de 0D et 0As
— ruffin

J'avais l'habitude d'utiliser Environment.NewLinemais il ne semblait pas gérer les instances où \rétait présent sans \n. TrimEnd('r','\n')semble être plus fiable dans ce cas.
— ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Il se peut que ce soit en fait un problème multiplateforme et que dec doive supprimer spécifiquement les deux \ r \ n, indépendamment de ce que dit l'environnement système.
— Andrew Hill

12
String temp = s.Replace("\r\n","").Trim();

sétant la chaîne d'origine. (Notez les majuscules)


11
Cela permettra également: 1) de supprimer \ r \ n du milieu de la chaîne, 2) de supprimer tous les espaces du début de la chaîne et 3) de supprimer tous les espaces de la fin de la chaîne.
— RichieHindle

Certes, je n'ai supposé qu'un seul / r / n à la fin. Cela n'a pas été mentionné dans le post original. Je ne suis pas sûr que cela justifie un vote de -1
— Crash893

Exactement ce que je cherchais. Merci.
— NotMe

4
Est utilise replace()alors trim()pas surpuissant quand TrimEnd()peut faire le travail seul, ou suis - je manque quelque chose?
— ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

great suggestion @MattBaker
— Crash893

8
s.TrimEnd();

Ce qui précède est tout ce dont j'avais besoin pour supprimer '\ r \ n' de la fin de ma chaîne.

La réponse votée me semble fausse. Premièrement, cela n'a pas fonctionné lorsque j'ai essayé, deuxièmement, si cela fonctionnait, je m'attendrais à ce que s.TrimEnd ('\ r', '\ n') ne supprime que soit un '\ r' ou un '\ n' , donc je devrais l'exécuter deux fois sur ma chaîne - une fois pour quand '\ n' était à la fin et la deuxième fois pour quand '\ r' était à la fin (maintenant que le '\ n' était supprimé) .


4

S'il y a toujours un seul CRLF, alors:

myString = myString.Substring(0, myString.Length - 2);

S'il peut l'avoir ou non, alors:

Regex re = new Regex("\r\n$");
re.Replace(myString, "");

Ces deux éléments (de par leur conception) supprimeront au plus un seul CRLF. Mettez en cache l'expression régulière pour les performances.


4

Pour nous VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})

3
string k = "This is my\r\nugly string. I want\r\nto change this. Please \r\n help!";
k = System.Text.RegularExpressions.Regex.Replace(k, @"\r\n+", " ");

3

C'était trop facile - pour moi, je filtre certains éléments de courrier électronique. J'écris mon propre filtre de courrier indésirable personnalisé. Avec \ r et / ou \ n dans la chaîne, il effaçait tous les éléments au lieu de filtrer.

Donc, je viens de faire filter = filter.Remove ('\ n') et filter = filter.Remove ('\ r'). Je crée mon filtre de manière à ce qu'un utilisateur final puisse utiliser le Bloc-notes pour modifier directement le fichier afin qu'il ne soit pas possible de savoir où ces caractères pourraient s'intégrer - cela pourrait être autre qu'au début ou à la fin de la chaîne. Donc, les supprimer tous suffit.

Les autres entrées fonctionnent toutes, mais Supprimer pourrait être le plus simple?

J'ai appris un peu plus sur Regex à partir de cet article - un travail assez cool avec son utilisation ici.


On dirait que vous pourriez faire justefilter = filter.Remove('\n').Remove('\r');
— John Saunders

2

J'utilise beaucoup de niveau d'effacement

String donen = "lots of stupid whitespaces and new lines and others..."

//Remove multilines
donen = Regex.Replace(donen, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
//remove multi whitespaces
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
donen = regex.Replace(donen, " ");
//remove tabs
char tab = '\u0009';
donen = donen.Replace(tab.ToString(), "");
//remove endoffile newlines
donen = donen.TrimEnd('\r', '\n');
//to be sure erase new lines again from another perspective
donen.Replace(Environment.NewLine, "");

et maintenant nous avons une rangée propre



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.