Zgaduję, ale: Obsługa wielu platform. Różne systemy używają różnych znaków dla nowej linii, np. \ N kontra \ r \ n. C # ma Environment.NewLine w tym samym celu.
Jordan działa
Java również ma coś w Systemie, ale% n jest łatwiejsze w printf.
Paul Tomblin
dlaczego java zmienił tę konwencję c == +1, :)
Michael Dimmitt
Nie zmiana, dodatek / ulepszenie. \ n nadal oznacza \ n
Bill K
(uwaga dla przyszłych czytelników: C już automatycznie konwertuje \ndo nowej linii specyficznej dla platformy w formacie tekstowym, zobacz to , Java nie)
user202729
Odpowiedzi:
150
Z szybkiego google:
Istnieje również jeden specyfikator, który nie odpowiada argumentowi. To „% n” generuje przerwanie linii. W niektórych przypadkach można również użyć znaku "\ n", ale ponieważ "% n" zawsze wyświetla poprawny separator linii specyficzny dla platformy, można go przenosić między platformami, podczas gdy "\ n" nie.
@ user2864740 To prawda, nie wyświetla poprawnego separatora wiersza specyficznego dla platformy, ale bieżący .
Hauke Ingmar Schmidt
umm, co to znaczy?
Kalpesh Soni
Uważam, że używa tego dla bieżącego systemu operacyjnego, na którym działa, ale jeśli działa w systemie Linux i generuje kod dla systemu Windows, może nie być tym, czego szukasz. W przeciwnym razie nie jestem pewien, do czego mogli się odnosić pozostali dwaj komentatorzy.
Chociaż \njest to poprawny znak nowej linii dla systemów uniksowych, inne systemy mogą używać innych znaków do reprezentowania końca linii. W szczególności wykorzystanie systemu Windows \r\ni wczesne systemy MacOS \r.
Używając %nw swoim ciągu formatu, mówisz Javie, aby używała wartości zwróconej przez System.getProperty("line.separator"), która jest separatorem linii dla bieżącego systemu.
Jeśli tworzysz kod NETWORKING, możesz preferować pewność \n, w przeciwieństwie do tego, %nktóry może wysyłać różne znaki przez sieć, w zależności od platformy, na której działa.
„poprawność” zależy od tego, co dokładnie próbujesz zrobić.
\ n zawsze da ci zakończenie linii "w stylu unixowym". \ r \ n zawsze daje zakończenie linii w stylu „dos style”. % n poda zakończenie linii dla platformy, na której pracujesz
C radzi sobie z tym inaczej. Możesz wybrać otwarcie pliku w trybie „tekstowym” lub „binarnym”. Jeśli otworzysz plik w trybie binarnym, \ n da ci zakończenie linii w stylu "unixowym", a "\ r \ n" da ci zakończenie linii w stylu "dos style". Jeśli otworzysz plik w trybie "tekstowym" w systemie DOS / Windows, to podczas pisania \ n kod obsługi pliku konwertuje go na \ r \ n. Otwierając plik w trybie tekstowym i używając \ n, otrzymujesz zakończenie wiersza specyficzne dla platformy.
Rozumiem, dlaczego projektanci javy nie chcieli powielać hakerskich pomysłów C dotyczących trybów plików "tekstowy" i "binarny".
Zauważ, że te odpowiedzi są prawdziwe tylko wtedy, gdy używasz System.out.printf()or System.out.format()lub Formatterobiektu. Jeśli użyjesz %nw System.out.println(), po prostu wygeneruje znak %n, a nie znak nowej linii.
Specyfikator formatu% n to separator linii, który można przenosić między systemami operacyjnymi. Nie można go jednak używać jako argumentu funkcji System.out.print lub System.out.println.
Zawsze zaleca się używanie tej nowej wersji separatora linii powyżej \ n.
\n
do nowej linii specyficznej dla platformy w formacie tekstowym, zobacz to , Java nie)Odpowiedzi:
Z szybkiego google:
Proszę zapoznać się z https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
Pierwotnym źródłem
źródło
%n
jest przenośny między platformami\n
nie jest.Zobacz składnię ciągu formatującego w dokumentacji referencyjnej :
źródło
Chociaż
\n
jest to poprawny znak nowej linii dla systemów uniksowych, inne systemy mogą używać innych znaków do reprezentowania końca linii. W szczególności wykorzystanie systemu Windows\r\n
i wczesne systemy MacOS\r
.Używając
%n
w swoim ciągu formatu, mówisz Javie, aby używała wartości zwróconej przezSystem.getProperty("line.separator")
, która jest separatorem linii dla bieżącego systemu.źródło
Ostrzeżenie:
Jeśli tworzysz kod NETWORKING, możesz preferować pewność
\n
, w przeciwieństwie do tego,%n
który może wysyłać różne znaki przez sieć, w zależności od platformy, na której działa.źródło
„poprawność” zależy od tego, co dokładnie próbujesz zrobić.
\ n zawsze da ci zakończenie linii "w stylu unixowym". \ r \ n zawsze daje zakończenie linii w stylu „dos style”. % n poda zakończenie linii dla platformy, na której pracujesz
C radzi sobie z tym inaczej. Możesz wybrać otwarcie pliku w trybie „tekstowym” lub „binarnym”. Jeśli otworzysz plik w trybie binarnym, \ n da ci zakończenie linii w stylu "unixowym", a "\ r \ n" da ci zakończenie linii w stylu "dos style". Jeśli otworzysz plik w trybie "tekstowym" w systemie DOS / Windows, to podczas pisania \ n kod obsługi pliku konwertuje go na \ r \ n. Otwierając plik w trybie tekstowym i używając \ n, otrzymujesz zakończenie wiersza specyficzne dla platformy.
Rozumiem, dlaczego projektanci javy nie chcieli powielać hakerskich pomysłów C dotyczących trybów plików "tekstowy" i "binarny".
źródło
W Javie
\n
zawsze generuj\u000A
znak wysuwu wiersza. Aby uzyskać właściwy separator linii dla konkretnego zastosowania platformy%n
.Dlatego używaj,
\n
gdy jesteś pewien, że potrzebujesz\u000A
znaku wysuwu wiersza, na przykład w sieci.We wszystkich innych sytuacjach użyj
%n
źródło
Zauważ, że te odpowiedzi są prawdziwe tylko wtedy, gdy używasz
System.out.printf()
orSystem.out.format()
lubFormatter
obiektu. Jeśli użyjesz%n
wSystem.out.println()
, po prostu wygeneruje znak%n
, a nie znak nowej linii.źródło
Specyfikator formatu% n to separator linii, który można przenosić między systemami operacyjnymi. Nie można go jednak używać jako argumentu funkcji System.out.print lub System.out.println.
Zawsze zaleca się używanie tej nowej wersji separatora linii powyżej \ n.
źródło