Como remover novas linhas do início e do fim de uma string?

129

Eu tenho uma seqüência de caracteres que contém algum texto seguido por uma linha em branco. Qual é a melhor maneira de manter a parte com texto, mas remova a nova linha de espaço em branco do final?

Confiqure
fonte
1
Não, não é. A pergunta no link está perguntando sobre 'substituir' em vez disso.
Faiz

Respostas:

277

Use o String.trim()método para se livrar dos espaços em branco (espaços, novas linhas etc.) do início e do fim da string.

String trimmedString = myString.trim();
Crozin
fonte
18
A questão é sobre novas linhas. Isso remove mais do que apenas novas linhas
mmm
21
String.replaceAll("[\n\r]", "");
John B
fonte
14
Bro, @JohnB Ele também removerá todos os novos caracteres de linha entre a string. a solicitação é remover apenas o caractere de nova linha inicial e final.
siddhartha
5

tl; dr

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

O String::trimmétodo antigo possui uma definição estranha de espaço em branco .

Conforme discutido aqui , o Java 11 adiciona novos strip…métodos à Stringclasse. Eles usam uma definição de espaço em branco mais otimizada para Unicode. Veja as regras desta definição na classe JavaDoc para Character::isWhitespace.

Código de exemplo.

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

Ou você pode retirar apenas o espaço em branco à esquerda ou à direita .

Você não menciona exatamente quais pontos de código compõem suas novas linhas. Imagino que sua nova linha esteja provavelmente incluída nesta lista de pontos de código segmentados por strip:

  • É um caractere de espaço Unicode (SPACE_SEPARATOR, LINE_SEPARATOR ou PARAGRAPH_SEPARATOR), mas também não é um espaço sem quebra ('\ u00A0', '\ u2007', '\ u202F').
  • É '\ t', U + 0009 TABULAÇÃO HORIZONTAL.
  • É '\ n', U + 000A LINE FEED.
  • É '\ u000B', U + 000B TABELA VERTICAL.
  • É '\ f', U + 000C FORM FEED.
  • É '\ r', U + 000D RETORNO DE CARRO.
  • É '\ u001C', U + 001C ARQUIVO SEPARADOR.
  • É '\ u001D', U + 001D SEPARADOR DE GRUPO.
  • É '\ u001E', U + 001E SEPARATOR DE GRAVAÇÃO.
  • É '\ u001F', U + 0
Basil Bourque
fonte
4

Esse código Java faz exatamente o que é solicitado no título da pergunta, ou seja, "remove novas linhas do início e do fim de uma string-java":

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

Remova as novas linhas apenas do final da linha:

String.replaceAll("[\n\r]$", "")

Remova as novas linhas apenas do início da linha:

String.replaceAll("^[\n\r]", "")
Alexander Samoylov
fonte
Você poderia fornecer um contexto extra para sua resposta? Dessa forma, todos podem entender o que seu código faz e por quê.
Mariano Zorrilla
Eu adicionei explicações à minha resposta. Espero que agora esteja claro.
Alexander Samoylov
1
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. Início de uma string = ^,
  2. Fim de uma string = $,
  3. combinação regex = | ,
  4. Quebra de linha = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]
hmmh
fonte
0

Vou adicionar uma resposta a isso também porque, embora eu tenha a mesma pergunta, a resposta fornecida não é suficiente. Pensando bem, percebi que isso pode ser feito muito facilmente com uma expressão regular.

Para remover novas linhas desde o início:

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

e final de uma string:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

Estou certo de que essa não é a maneira mais eficiente de aparar uma string. Mas parece ser a maneira mais limpa e simples de incorporar essa operação.

Observe que o mesmo método pode ser feito para aparar qualquer variação e combinação de caracteres de cada extremidade, pois é uma regex simples.

Zhro
fonte
Sim, mas e se você não souber quantas linhas existem no começo / fim? Sua solução pressupõe que existem exatamente 2 novas linhas nos dois casos
Luka Govedič
O segundo parâmetro de split()é apenas o limite. Deixe-o desativado se desejar corresponder um número ilimitado de vezes.
Zhro 17/07/19
0

Tente isto

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}
Jobelle
fonte
0

Se você deseja remover apenas quebras de linha (não espaços, tabulações) no início e no final de uma String (não entre elas), use esta abordagem:

Use expressões regulares para remover retornos de carro ( \\r) e feeds de linha ( \\n) do início ( ^) e final ( $) de uma sequência:

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

Exemplo completo:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

Emite:

before: >
Hello
World
<
after: >Hello
World<
slartidan
fonte
-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
Khan
fonte
2
Isso não responde corretamente à pergunta. Ele remove todos os CR e LFs, não apenas aqueles no início e no final.
James.garriss 26/05
Isso substituirá tudo, não apenas desde o início e o fim.
Hamzeh Soboh 22/07/2015