Removendo o retorno de carro e a nova linha do final de uma string em c #

113

Como removo o caractere de retorno de carro (\r)e o caractere (\n)de nova linha do final de uma string?

Avik
fonte

Respostas:

198

Isso eliminará qualquer combinação de retornos de carro e novas linhas do final de s:

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

Edit : Ou, como JP gentilmente aponta, você pode soletrar de forma mais sucinta como:

s = s.TrimEnd('\r', '\n');
RichieHindle
fonte
10
Observe a palavra-chave params na declaração de TrimEnd, ela permite que você passe várias instâncias de um caractere ao invés do array. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto
3
Que tal isso: s = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О
4
Tenho escrito c # desde o lançamento da v1.0 (10 anos atrás). Agora você me fala sobre TrimEnd. Doh!
s15199d
7
Só por interesse, tudo o que você realmente precisa é s = s.TrimEnd()- como dizem os documentos: Se trimChars for nulo ou uma matriz vazia, os caracteres de espaço em branco Unicode serão removidos. - consulte String.TrimEnd
Stuart Wood
@StuartWood: ... que não foi o que a Avik pediu. Ele pediu especificamente para '\r'e '\n'e nada mais, não o caractere de espaço ' ', por exemplo.
RichieHindle
31

Isso deve funcionar ...

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

Se você estiver usando várias plataformas, estará mais seguro usando este método.

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

Ele levará em conta diferentes caracteres de nova linha e de retorno de carro.

Alex Wiese
fonte
O método de JP - tst.TrimEnd( '\r', '\n' )- é razoavelmente "seguro" na prática, visto que os principais EOLs são [atualmente] apenas combinações diferentes de \re \n, mas o de alexw é a resposta "certa". Deixe o CLR dizer quais são os chars na nova linha desta plataforma. EOL nem sempre foi combinações de 0Ds e 0As
ruffin de
Eu costumava usar, Environment.NewLinemas não parecia lidar com instâncias em que \restava presente sem \n. TrimEnd('r','\n')parece ser mais confiável neste caso.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
2
Pode ser que este seja realmente um problema de plataforma cruzada e dec precisa remover especificamente ambos \ r \ n, independentemente do que o ambiente do sistema diz.
Andrew Hill
13
String temp = s.Replace("\r\n","").Trim();

ssendo a string original. (Letras maiúsculas)

Crash893
fonte
11
Isso também irá: 1) Remover \ r \ n do meio da string, 2) Remover quaisquer caracteres de espaço em branco do início da string e 3) remover quaisquer caracteres de espaço em branco do final da string.
RichieHindle
Verdade, presumi apenas um / r / n no final. Não foi mencionado na postagem original. Não tenho certeza se isso garante um voto -1
Crash893
Exatamente o que eu estava procurando. Obrigado.
NotMe
4
Usar replace()então trim()não é exagero quando TrimEnd()posso fazer o trabalho sozinho ou estou perdendo alguma coisa?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
ótima sugestão @MattBaker
Crash893
8
s.TrimEnd();

O texto acima é tudo que eu precisava para remover '\ r \ n' do final da minha string.

A resposta votada parece errada para mim. Em primeiro lugar, isso não funcionou quando eu tentei, em segundo lugar, se ele fez um trabalho eu esperaria que s.TrimEnd ( '\ r', '\ n') só iria remover qualquer um '\ r' ou '\ n' , então eu teria que executá-lo em minha string duas vezes - uma para quando '\ n' estava no final e a segunda vez para quando '\ r' estava no final (agora que o '\ n' foi removido) .

martinp999
fonte
4

Se houver sempre um único CRLF, então:

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

Se pode ou não ter, então:

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

Ambos (por design) removerão no máximo um único CRLF. Armazene o regex para desempenho.

Matthew Flaschen
fonte
4

Para nós, VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Simon
fonte
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
fonte
3

Isso foi muito fácil - para mim, estou filtrando alguns itens de e-mail. Estou escrevendo meu próprio filtro de lixo eletrônico personalizado. Com \ r e / ou \ n na string, ele estava apagando todos os itens em vez de filtrar.

Então, acabei de fazer filter = filter.Remove ('\ n') e filter = filter.Remove ('\ r'). Estou fazendo meu filtro de forma que um usuário final possa usar o Bloco de notas para editar diretamente o arquivo, então não há como dizer onde esses caracteres podem se encaixar - podem estar em algo diferente do início ou final da string. Então, removê-los todos resolve.

Todas as outras entradas funcionam, mas Remover pode ser a mais fácil?

Aprendi um pouco mais sobre Regex neste post - um trabalho muito legal com seu uso aqui.

user1585204
fonte
Parece que você poderia fazer apenasfilter = filter.Remove('\n').Remove('\r');
John Saunders
2

Eu uso muito nível de apagamento

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, "");

e agora temos uma linha limpa

matasoy
fonte
0
varName.replace(/[\r\n]/mg, '')                                              
Pat
fonte
0

Isso é o que eu tenho que trabalhar para mim.

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