Java'nın printf'deki "% n" nesi nedir?


107

Etkili Java okuyorum ve %nher yerde satırsonu karakteri için kullanıyor . \nJava programlarında satırsonu için oldukça başarılı bir şekilde kullandım .

'Doğru' olan hangisi? Neyin var \n? Java neden bu C kuralını değiştirdi?


1
Sadece bir tahmin ama: Çapraz platform desteği. Farklı sistemler yeni satırlar için farklı karakterler kullanır, örneğin \ n ve \ r \ n. C #, aynı amaç için Environment.NewLine'a sahiptir.
Jordan

Java'nın System'de de bir şeyi vardır, ancak% n bir printf'de daha kolaydır.
Paul Tomblin

Java neden bu c kuralını değiştirdi == +1, :)
Michael Dimmitt

Bir değişiklik değil, bir ekleme / geliştirme. \ n hala şu anlama geliyor
Bill K

(gelecek okuyucularına not: C zaten dönüştürmek oto \nmetin biçiminde platforma özel satırsonu için, bkz bu Java does not)
user202729

Yanıtlar:


150

Hızlı bir google'dan:

Bir argümana karşılık gelmeyen bir tanımlayıcı da vardır. Satır sonu veren "% n" dir. Bazı durumlarda bir "\ n" de kullanılabilir, ancak "% n" her zaman platforma özgü doğru satır ayırıcıyı çıktıladığından, platformlar arasında taşınabilirken "\ n" değildir.

Lütfen https://docs.oracle.com/javase/tutorial/java/data/numberformat.html bakın

Orjinal kaynak


@ user2864740 Bu doğru, platforma özgü doğru satır ayırıcıyı değil, geçerli olanı çıktı.
Hauke ​​Ingmar Schmidt

umm, bu ne anlama geliyor?
Kalpesh Soni

Üzerinde çalıştığı mevcut işletim sistemi için olanı kullandığına inanıyorum, ancak Linux'ta çalışıyorsa ve Windows için kod çıktısı veriyorsa, peşinde olduğunuz şey olmayabilir. Diğer iki yorumcunun neye atıfta bulunduğundan başka türlü emin değilim.
Bill K


24

\nUnix tabanlı sistemler için doğru satırsonu karakteri olsa da, diğer sistemler bir satırın sonunu temsil etmek için farklı karakterler kullanabilir. Özellikle Windows sistem kullanımı \r\nve ilk MacOS sistemleri kullanılmıştır \r.

%nBiçim dizenizi kullanarak , Java'ya, döndürülen değeri System.getProperty("line.separator"), geçerli sistem için satır ayırıcı olan, kullanmasını söylersiniz .


18

Uyarı:

NETWORKING kodu yapıyorsanız , hangi platformda çalıştığına bağlı olarak ağ üzerinden farklı karakterler gönderebileceğinin \naksine kesinliğini tercih %nedebilirsiniz.


8

"doğru" tam olarak ne yapmaya çalıştığınıza bağlıdır.

\ n size her zaman bir "unix stili" satır sonu verecektir. \ r \ n size her zaman bir "dos stili" satır sonu verecektir. % n size üzerinde çalıştığınız platform için satır sonunu verecektir

C bunu farklı şekilde ele alıyor. Bir dosyayı "metin" veya "ikili" modda açmayı seçebilirsiniz. Dosyayı ikili modda açarsanız, \ n size bir "unix stili" satır sonu verir ve "\ r \ n" size bir "dos stili" satır sonu verir. Dosyayı bir dos / Windows sisteminde "metin" modunda açarsanız, \ n yazdığınızda dosya işleme kodu \ r \ n biçimine dönüştürülür. Yani bir dosyayı metin modunda açıp \ n kullanarak platforma özel satır sonunu elde edersiniz.

Java tasarımcılarının neden C'nin "metin" ve "ikili" dosya modlarıyla ilgili hilekar fikirlerini kopyalamak istemediklerini anlayabiliyorum.


4

Java olarak, \nher zaman üretmek \u000Asatır besleme karakteri. Belirli platform kullanımı için doğru çizgi ayırıcı elde etmek için %n.

Bu nedenle , örneğin ağ oluşturma gibi satır besleme karakterine \nihtiyacınız olduğundan emin olduğunuzda kullanın \u000A.
Diğer tüm durumlarda kullanın%n


4

Bu yanıtların yalnızca System.out.printf()veya System.out.format()veya Formatternesneyi kullanırken doğru olduğuna dikkat edin . Eğer kullanırsanız %niçinde System.out.println(), sadece bir üretecek %ndeğil, bir yeni satır.


0

% n biçim belirteci, işletim sistemleri arasında taşınabilir olan bir satır ayırıcıdır. Ancak, System.out.print veya System.out.println işlevlerine bağımsız değişken olarak kullanılamaz.

Her zaman yukarıdaki satır ayırıcının bu yeni sürümünü kullanmanız önerilir \ n.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.