Estou lendo Effective Java e ele usa %npara o caractere de nova linha em todos os lugares. Tenho usado com \nbastante sucesso para newline em programas Java.
Qual é o 'correto'? O que há de errado \n? Por que o Java mudou essa convenção C?
Só um palpite, mas: Suporte multiplataforma. Sistemas diferentes usam caracteres diferentes para novas linhas, por exemplo, \ n vs. \ r \ n. C # tem Environment.NewLine para o mesmo propósito.
Jordan em execução em
Java também tem algo em System, mas% n é mais fácil em um printf.
Paul Tomblin
por que java mudou esta convenção c == +1, :)
Michael Dimmitt
Não é uma mudança, uma adição / aprimoramento. \ n ainda significa \ n
Bill K,
(observação para leitores futuros: C já é convertido automaticamente \npara nova linha específica da plataforma em formato de texto, veja isso , o Java não)
user202729
Respostas:
150
De um rápido google:
Também existe um especificador que não corresponde a um argumento. É "% n" que produz uma quebra de linha. Um "\ n" também pode ser usado em alguns casos, mas como "% n" sempre exibe o separador de linha específico da plataforma correto, ele é portátil entre plataformas, enquanto "\ n" não é.
@ user2864740 É verdade, ele não mostra o separador de linha específico da plataforma correto , mas o atual .
Hauke Ingmar Schmidt
umm, o que isso significa?
Kalpesh Soni
Eu acredito que ele usa aquele para o sistema operacional atual em que está rodando, mas se estiver rodando no Linux e gerando código para o Windows, pode não ser o que você está procurando. Por outro lado, não tenho certeza do que os outros dois comentaristas podem estar se referindo.
Embora \nseja o caractere de nova linha correto para sistemas baseados em Unix, outros sistemas podem usar caracteres diferentes para representar o fim de uma linha. Em particular, o uso do sistema Windows \r\ne os primeiros sistemas MacOS usados \r.
Ao usar %nem sua string de formato, você diz ao Java para usar o valor retornado por System.getProperty("line.separator"), que é o separador de linha para o sistema atual.
Se você estiver fazendo código NETWORKING, você pode preferir a certeza de \n, em vez de %nenviar caracteres diferentes pela rede, dependendo da plataforma em que está sendo executado.
"correto" depende do que exatamente você está tentando fazer.
\ n sempre fornecerá um final de linha "estilo unix". \ r \ n sempre fornecerá um final de linha "estilo dos". % n fornecerá o final da linha para a plataforma em que você está executando
C lida com isso de forma diferente. Você pode escolher abrir um arquivo no modo "texto" ou "binário". Se você abrir o arquivo no modo binário, \ n terá um final de linha "estilo unix" e "\ r \ n" fornecerá um final de linha "estilo dos". Se você abrir o arquivo no modo "texto" em um sistema DOS / Windows, quando você escrever \ n, o código de manipulação do arquivo o converterá em \ r \ n. Portanto, abrindo um arquivo em modo de texto e usando \ n, você obtém o final de linha específico da plataforma.
Posso ver por que os designers de java não queriam replicar as idéias hacky de C em relação aos modos de arquivo "texto" e "binário".
Observe que essas respostas são verdadeiras apenas ao usar System.out.printf()ou System.out.format()ou o Formatterobjeto. Se você usar %nem System.out.println(), ele simplesmente produzirá uma %n, não uma nova linha.
O especificador de formato% n é um separador de linha portátil entre sistemas operacionais. No entanto, ele não pode ser usado como um argumento para as funções System.out.print ou System.out.println.
É sempre recomendável usar esta nova versão do separador de linha acima de \ n.
\n
para nova linha específica da plataforma em formato de texto, veja isso , o Java não)Respostas:
De um rápido google:
Consulte https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Fonte original
fonte
%n
é portátil entre plataformas,\n
não é.Consulte a sintaxe da string de formatação na documentação de referência :
fonte
Embora
\n
seja o caractere de nova linha correto para sistemas baseados em Unix, outros sistemas podem usar caracteres diferentes para representar o fim de uma linha. Em particular, o uso do sistema Windows\r\n
e os primeiros sistemas MacOS usados\r
.Ao usar
%n
em sua string de formato, você diz ao Java para usar o valor retornado porSystem.getProperty("line.separator")
, que é o separador de linha para o sistema atual.fonte
Aviso:
Se você estiver fazendo código NETWORKING, você pode preferir a certeza de
\n
, em vez de%n
enviar caracteres diferentes pela rede, dependendo da plataforma em que está sendo executado.fonte
"correto" depende do que exatamente você está tentando fazer.
\ n sempre fornecerá um final de linha "estilo unix". \ r \ n sempre fornecerá um final de linha "estilo dos". % n fornecerá o final da linha para a plataforma em que você está executando
C lida com isso de forma diferente. Você pode escolher abrir um arquivo no modo "texto" ou "binário". Se você abrir o arquivo no modo binário, \ n terá um final de linha "estilo unix" e "\ r \ n" fornecerá um final de linha "estilo dos". Se você abrir o arquivo no modo "texto" em um sistema DOS / Windows, quando você escrever \ n, o código de manipulação do arquivo o converterá em \ r \ n. Portanto, abrindo um arquivo em modo de texto e usando \ n, você obtém o final de linha específico da plataforma.
Posso ver por que os designers de java não queriam replicar as idéias hacky de C em relação aos modos de arquivo "texto" e "binário".
fonte
Em java,
\n
sempre gere o\u000A
caractere de avanço de linha. Para obter o separador de linha correto para uso particular da plataforma%n
.Portanto, use
\n
quando tiver certeza de que precisa do\u000A
caractere de avanço de linha, por exemplo, em redes.Em todas as outras situações, use
%n
fonte
Observe que essas respostas são verdadeiras apenas ao usar
System.out.printf()
ouSystem.out.format()
ou oFormatter
objeto. Se você usar%n
emSystem.out.println()
, ele simplesmente produzirá uma%n
, não uma nova linha.fonte
O especificador de formato% n é um separador de linha portátil entre sistemas operacionais. No entanto, ele não pode ser usado como um argumento para as funções System.out.print ou System.out.println.
É sempre recomendável usar esta nova versão do separador de linha acima de \ n.
fonte