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?
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?
Respostas:
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();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
O String::trim
método antigo possui uma definição estranha de espaço em branco .
Conforme discutido aqui , o Java 11 adiciona novos strip…
métodos à String
classe. 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
:
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]", "")
Se sua string for potencialmente null
, considere usar StringUtils.trim()
- a versão com segurança nula de String.trim()
.
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])$", "") + "]");
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.
split()
é apenas o limite. Deixe-o desativado se desejar corresponder um número ilimitado de vezes.
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<
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");