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?

Avik
la source

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');
RichieHindle
la source
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' );
JP Alioto
la source
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.

Alex Wiese
la source
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)

Crash893
la source
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é) .

martinp999
la source
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.

Matthew Flaschen
la source
4

Pour nous VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Simon
la source
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+", " ");
vnRock
la source
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.

user1585204
la source
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

matasoy
la source
0
varName.replace(/[\r\n]/mg, '')                                              
Tapoter
la source
0

C'est ce que je dois travailler pour moi.

s.Replace("\r","").Replace("\n","")
Jordan Mahsman
la source