Por favor, conte-nos mais: o que é uma "quebra de linha" para você? Com o que você deseja substituí-los?
Jay Bazuzi 26/10/08
ha ha. Eu estava verificando o mesmo em java quando descobri que System.getProperty ("line.separator") estava curioso para saber a contrapartida em c #. sua postagem me ajudou.
myString = myString.Replace(System.Environment.NewLine,"replacement text");//add a line terminating ;
Conforme mencionado em outras postagens, se a string vier de outro ambiente (SO), você precisará substituir a implementação desses ambientes em particular de novos caracteres de controle de linha .
Primeiro, não funcionou para mim. Após algumas pesquisas, encontrei a solução: tive que usar 'using System;' ou 'System.Environment.NewLine'
Smolla 27/02
12
Não removeu todos os caracteres da nova linha. Tente esta string "\ n \ r \ nMinha mensagem \ r \ n \ n \ r \ n é essa. \ N \ n \ r \ n"
Shakti Prakash Singh
13
Em geral, eu gosto desta solução. No entanto, observe que, mesmo no mesmo sistema operacional, as novas linhas reais podem não corresponder. Isso aconteceu comigo porque o processamento retornou o SQL. As novas linhas foram \ n, enquanto Environment.NewLine foi \ r \ n. O resultado foi que nada foi correspondido e as novas linhas permaneceram.
Dono2
@Dono> de onde vêm os dados SQL? Provavelmente de uma fonte externa que lida com novas linhas da maneira UNIX. Isso é um problema com o formato de dados, não com OS ou este método ...
Laurent S.
Esse deve ser um dos métodos estáticos da classe String. NET em si deve ser capaz de detectar formato de quebras de linha de origem em uma corda e convertê-lo para Environment.NewLine \ r \ n formato ...
Dean Kuga
442
As soluções postadas até agora apenas substituem Environment.NewLineou falham se a sequência de substituição contiver quebras de linha porque são chamadas string.Replacevárias vezes.
Aqui está uma solução que usa uma expressão regular para fazer todas as três substituições em apenas uma passagem pela string. Isso significa que a cadeia de substituição pode conter com segurança quebras de linha.
string result =Regex.Replace(input,@"\r\n?|\n", replacementString);
então o seu ditado em fazer Regex.Replace (input, @ "[\ r \ n] +", ReplacementString) não realizaria a mesma tarefa?
flamebaud
7
@flamebaud Não, isso produziria um resultado diferente se houver várias quebras de linha seguidas. "\ r \ n? | \ n" substituiria cada quebra de linha, enquanto "[\ r \ n] +" faria uma única substituição para qualquer número de quebras de linha.
David Hammond
Para aqueles preocupados com múltiplas quebras de linha: / (\ r \ n | \ n?) / Gm
BobbyA
4
Esta é realmente a solução correta se você deseja remover a quebra de linha em uma string que pode vir de diferentes sistemas operacionais. Um bom exemplo é a formatação JSON. +1
Bastien Vandamme 07/10
1
Se a string literal (@ prefix) não for usada, será necessário ter duas barras invertidas seguidas em todos os lugares em que for usada, portanto a resposta de @mark_byers acima ainda estará correta. O prefixo @ faz com que a barra invertida faça parte da cadeia de caracteres que deve ser usada pelo Regex para usá-lo como caractere de escape.
Kirk Liemohn
173
Para estender a resposta do The.Anyi.9, você também deve estar ciente dos diferentes tipos de quebra de linha em uso geral . Dependendo de onde o arquivo foi originado, convém verificar todas as alternativas ...
Primeiro, gostei mais do ambiente, mas se o String não vier do sistema em execução, ele não funcionará. 1
Flo
1
não é Line.Replace("\n", replaceWith).Replace("\r", replaceWith);suficiente?
22615 Thomas Ayoub
5
Não, porque se você tiver, \r\nvocê terminará com a sequência de substituição duas vezes - não é o ideal.
ZombieSheep
1
Você não precisa de literais de string? string removedBreaks = Line.Replace (@ "\ r \ n", replaceWith) .Replace (@ "\ n", replaceWith) .Replace (@ "\ r", replaceWith);
Shawn Dotey
2
@ ShawnDotey não é necessário, queremos substituir caracteres de controle, não sequências de barra invertida e letra.
N.Kudryavtsev
38
Eu usaria Environment.Newline quando desejava inserir uma nova linha para uma string, mas não para remover todas as novas linhas de uma string.
Dependendo da sua plataforma, você pode ter diferentes tipos de novas linhas, mas mesmo dentro da mesma plataforma geralmente são usados diferentes tipos de novas linhas. Em particular ao lidar com formatos e protocolos de arquivos.
Essa é a única coisa que funcionou para mim quando eu queria recolher um código de página da web recuperado em uma única linha (para facilitar os padrões de expressão regular).
Paw Baltzersen
Concordo totalmente com Brian R. Bondy. A solução oferecida por Corin e tão votada é muito ingênua, pelo menos.
Califf 29/03
18
Se seu código deve ser executado em ambientes diferentes, eu consideraria usar a Environment.NewLineconstante, pois é especificamente a newlineusada no ambiente específico.
line = line.Replace(Environment.NewLine,"newLineReplacement");
No entanto, se você obtiver o texto de um arquivo originário de outro sistema, talvez essa não seja a resposta correta e substitua-a por qualquer constante de nova linha usada no outro sistema. Normalmente será \nou \r\n.
É necessário redesigná-lo novamente para a variável original, pois a substituição não ocorre no local.
tvanfosson 26/10/08
@driss Gostaria de saber como você selecionaria uma constante nova linha correta quando não tem idéia de que sistema veio um arquivo ... essa solução realmente parece UNIVERSAL.
Califf
14
Não esqueça que substituir não faz a substituição na sequência, mas retorna uma nova sequência com os caracteres substituídos. A seguir, serão removidas as quebras de linha (não as substituídas). Eu usaria o método @Brian R. Bondy se os substituísse por outra coisa, talvez envolvida como um método de extensão. Lembre-se de verificar os valores nulos antes de chamar Substituir ou os métodos de extensão fornecidos.
string line =...
line = line.Replace("\r","").Replace("\n","");
não pode ter ''em C # - não existe um caractere vazio. irá '\0'funcionar?
precisa
1
@ Shevek - apenas usou as aspas erradas. Deve ter feito uma boa quantidade de javascript no dia em que respondi a isso.
tvanfosson
@ Califf - é equivalente, não é melhor.
precisa saber é o seguinte
2
o erro que você cometeu aqui apenas prova que é melhor. A maioria das empresas em que trabalhei têm o padrão de codificação - NÃO USE LITERAIS HARDCODED.
Califf 03/02
2
@Califf O "erro" que cometi não teria sido cometido em um IDE com o Intellisense nem seria compilado. Se você acha que isso string.Emptyé melhor, use-o.
precisa saber é o seguinte
10
Para garantir que todas as formas possíveis de quebra de linha (Windows, Mac e Unix) sejam substituídas, você deve usar:
A melhor maneira de substituir com segurança as quebras de linha é
yourString.Replace("\r\n","\n")//handling windows linebreaks.Replace("\r","\n")//handling mac linebreaks
que deve produzir uma string com apenas \ n (por exemplo, avanço de linha) como quebras de linha. esse código também é útil para corrigir quebras de linha mistas.
Como a nova linha pode ser delimitada por \n, \re \r\n, primeiro, substituiremos \re \r\npor\n , e somente então dividiremos a sequência de dados.
As seguintes linhas devem ir para o parseCSVmétodo:
function parseCSV(data){//alert(data);//replace UNIX new lines
data = data.replace(/\r\n/g,"\n");//replace MAC new lines
data = data.replace(/\r/g,"\n");//split into rowsvar rows = data.split("\n");}
Outra opção é criar uma StringReadersobreposição em questão. No leitor, faça .ReadLine()em um loop. Então você tem as linhas separadas, independentemente dos separadores (consistentes ou inconsistentes) que eles tinham. Com isso, você pode proceder como desejar; uma possibilidade é usar um StringBuildere chamar.AppendLine -lo.
A vantagem é que você deixa a estrutura decidir o que constitui uma "quebra de linha".
var input =@"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";var match =@"[\\ ]+";var replaceWith =" ";Console.WriteLine("input: "+ input);var x =Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);Console.WriteLine("output: "+ x);
Se você deseja substituir novas linhas, guias e espaços em branco:
var input =@"sdfhlusdkuidfs\r\ndfgdgfd";var match =@"[\\s]+";var replaceWith ="";Console.WriteLine("input: "+ input);var x =Regex.Replace(input, match, replaceWith);Console.WriteLine("output: "+ x);
Respostas:
Use substituir por
Environment.NewLine
Conforme mencionado em outras postagens, se a string vier de outro ambiente (SO), você precisará substituir a implementação desses ambientes em particular de novos caracteres de controle de linha .
fonte
As soluções postadas até agora apenas substituem
Environment.NewLine
ou falham se a sequência de substituição contiver quebras de linha porque são chamadasstring.Replace
várias vezes.Aqui está uma solução que usa uma expressão regular para fazer todas as três substituições em apenas uma passagem pela string. Isso significa que a cadeia de substituição pode conter com segurança quebras de linha.
fonte
Para estender a resposta do The.Anyi.9, você também deve estar ciente dos diferentes tipos de quebra de linha em uso geral . Dependendo de onde o arquivo foi originado, convém verificar todas as alternativas ...
deve fazer você ir ...
fonte
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
suficiente?\r\n
você terminará com a sequência de substituição duas vezes - não é o ideal.Eu usaria Environment.Newline quando desejava inserir uma nova linha para uma string, mas não para remover todas as novas linhas de uma string.
Dependendo da sua plataforma, você pode ter diferentes tipos de novas linhas, mas mesmo dentro da mesma plataforma geralmente são usados diferentes tipos de novas linhas. Em particular ao lidar com formatos e protocolos de arquivos.
fonte
Se seu código deve ser executado em ambientes diferentes, eu consideraria usar a
Environment.NewLine
constante, pois é especificamente anewline
usada no ambiente específico.No entanto, se você obtiver o texto de um arquivo originário de outro sistema, talvez essa não seja a resposta correta e substitua-a por qualquer constante de nova linha usada no outro sistema. Normalmente será
\n
ou\r\n
.fonte
Não esqueça que substituir não faz a substituição na sequência, mas retorna uma nova sequência com os caracteres substituídos. A seguir, serão removidas as quebras de linha (não as substituídas). Eu usaria o método @Brian R. Bondy se os substituísse por outra coisa, talvez envolvida como um método de extensão. Lembre-se de verificar os valores nulos antes de chamar Substituir ou os métodos de extensão fornecidos.
Como métodos de extensão:
fonte
''
em C # - não existe um caractere vazio. irá'\0'
funcionar?string.Empty
é melhor, use-o.Para garantir que todas as formas possíveis de quebra de linha (Windows, Mac e Unix) sejam substituídas, você deve usar:
e nessa ordem, para não fazer quebras de linha extras, quando você encontrar uma combinação de caracteres de final de linha.
fonte
se você quiser "limpar" as novas linhas, o comentário flamebaud usando regex
@"[\r\n]+"
é a melhor opção.fonte
Eu precisava substituir o
\r\n
com retorno de carro real e avanço de linha e substituir\t
por uma guia real. Então, eu vim com o seguinte:fonte
Por que não ambos?
Nota: Substitua
strin
pelo nome da sua sequência de entrada.fonte
fonte
Use o método .Replace ()
fonte
A melhor maneira de substituir com segurança as quebras de linha é
que deve produzir uma string com apenas \ n (por exemplo, avanço de linha) como quebras de linha. esse código também é útil para corrigir quebras de linha mistas.
fonte
Como a nova linha pode ser delimitada por
\n
,\r
e\r\n
, primeiro, substituiremos\r
e\r\n
por\n
, e somente então dividiremos a sequência de dados.As seguintes linhas devem ir para o
parseCSV
método:fonte
ou
dependendo do caminho que você deseja seguir.
Espero que ajude.
fonte
Outra opção é criar uma
StringReader
sobreposição em questão. No leitor, faça.ReadLine()
em um loop. Então você tem as linhas separadas, independentemente dos separadores (consistentes ou inconsistentes) que eles tinham. Com isso, você pode proceder como desejar; uma possibilidade é usar umStringBuilder
e chamar.AppendLine
-lo.A vantagem é que você deixa a estrutura decidir o que constitui uma "quebra de linha".
fonte
Se você deseja substituir apenas as novas linhas:
Se você deseja substituir novas linhas, guias e espaços em branco:
fonte