How do I remove the carriage return character (\r)
and the new line character(\n)
from the end of a string?
This will trim off any combination of carriage returns and newlines from the end of s
:
s = s.TrimEnd(new char[] { '\r', '\n' });
Edit: Or as JP kindly points out, you can spell that more succinctly as:
s = s.TrimEnd('\r', '\n');
This should work ...
var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );
If you are using multiple platforms you are safer using this method.
value.TrimEnd(System.Environment.NewLine.ToCharArray());
It will account for different newline and carriage-return characters.
tst.TrimEnd( '\r', '\n' )
-- is reasonably "safe" in practice since major EOLs are [currently] just different combos of \r
and \n
, but alexw's is the "right" answer. Let the CLR tell you what chars are in this platform's newline. EOL hasn't always been combos of 0Ds and 0As
Environment.NewLine
but it didn't seem to handle instances where \r
was present without \n
. TrimEnd('r','\n')
seems to be more reliable in this case.
String temp = s.Replace("\r\n","").Trim();
s
being the original string. (Note capitals)
replace()
then trim()
not overkill when TrimEnd()
can do the job alone, or am I missing something?
s.TrimEnd();
The above is all I needed to remove '\r\n' from the end of my string.
The upvoted answer seems wrong to me. Firstly, it didn't work when I tried, secondly, if it did work I would expect that s.TrimEnd('\r', '\n') would only remove either a '\r' or a '\n', so I'd have to run it over my string twice - once for when '\n' was at the end and the second time for when '\r' was at the end (now that the '\n' was removed).
If there's always a single CRLF, then:
myString = myString.Substring(0, myString.Length - 2);
If it may or may not have it, then:
Regex re = new Regex("\r\n$");
re.Replace(myString, "");
Both of these (by design), will remove at most a single CRLF. Cache the regex for performance.
For us VBers:
TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
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+", " ");
This was too easy -- for me I'm filtering out certain email items. I'm writing my own custom email junk filter. With \r and/or \n in the string it was wiping out all items instead of filtering.
So, I just did filter = filter.Remove('\n') and filter = filter.Remove('\r'). I'm making my filter such that an end user can use Notepad to directly edit the file so there's no telling where these characters might embed themselves -- could be other than at the start or end of the string. So removing them all does it.
The other entries all work but Remove might be the easiest?
I learned quite a bit more about Regex from this post -- pretty cool work with its use here.
filter = filter.Remove('\n').Remove('\r');
I use lots of erasing level
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, "");
and now we have a clean one row
This is what I got to work for me.
s.Replace("\r","").Replace("\n","")
varName.replace(/[\r\n]/mg, '')
Success story sharing
s = s.TrimEnd()
- as the docs say: If trimChars is null or an empty array, Unicode white-space characters are removed instead. - see String.TrimEnd'\r'
and'\n'
and nothing else, not the space character' '
for instance.