Printf में जावा के "% n" के साथ क्या है?


107

मैं प्रभावी जावा पढ़ रहा हूं और यह %nहर जगह न्यूलाइन वर्ण के लिए उपयोग करता है। मैंने \nजावा प्रोग्रामों में न्यूलाइन के लिए सफलतापूर्वक उपयोग किया है।

'सही' कौन सा है? इसमें गलत क्या है \n? जावा ने इस C कन्वेंशन को क्यों बदला?


1
बस एक अनुमान है, लेकिन: क्रॉस-प्लेटफ़ॉर्म समर्थन। अलग-अलग सिस्टम नए वर्णों के लिए विभिन्न वर्णों का उपयोग करते हैं, जैसे \ n बनाम \ r \ n। C # के पास समान उद्देश्य के लिए Environment.NewLine है।
जॉर्डन रनिंग

जावा में सिस्टम में भी कुछ है, लेकिन प्रिंट एन में% n अधिक आसान है।
पॉल टॉम्बलिन

जावा ने इस c कन्वेंशन == +1, :) को क्यों बदला
माइकल डिमिट

परिवर्तन नहीं, परिवर्धन / वृद्धि। \ n अभी भी \ n का अर्थ है
बिल K

(भविष्य के पाठकों के लिए ध्यान दें: सी पहले से ही परिवर्तित ऑटो \nपाठ स्वरूप में मंच विशिष्ट न्यू लाइन करने के लिए, को देखने के लिए इस , जावा नहीं)
user202729

जवाबों:


150

एक त्वरित Google से:

वहाँ भी एक निर्दिष्ट है कि एक तर्क के अनुरूप नहीं है। यह "% n" है जो एक लाइन ब्रेक को आउटपुट करता है। कुछ मामलों में "\ n" का भी उपयोग किया जा सकता है, लेकिन चूंकि "% n" हमेशा सही प्लेटफ़ॉर्म-विशिष्ट लाइन विभाजक को आउटपुट करता है, यह प्लेटफार्मों भर में पोर्टेबल है जबकि "\ n" नहीं है।

कृपया https://docs.oracle.com/javase/tutorial/java/data/numberformat.html देखें

मूल स्रोत


@ user2864740 यह सच है, यह सही प्लेटफ़ॉर्म-विशिष्ट लाइन सेपरेटर को आउटपुट नहीं करता है, लेकिन वर्तमान में
हौके इंगमार श्मिट

उम, इसका क्या मतलब है?
कल्पेश सोनी

मेरा मानना ​​है कि यह चालू ओएस के लिए एक का उपयोग करता है जो यह चल रहा है, लेकिन अगर यह लिनक्स पर चल रहा है और विंडोज़ के लिए आउटपुट कोड है तो यह वह नहीं हो सकता है जो आप के बाद हैं। मुझे अन्यथा इस बात पर यकीन नहीं है कि अन्य दो टिप्पणीकारों का क्या जिक्र हो सकता है।
बिल के

30

%nप्लेटफार्मों भर में पोर्टेबल \nहै नहीं है।

संदर्भ प्रलेखन में फ़ॉर्मेटिंग स्ट्रिंग सिंटैक्स देखें :

'n' लाइन सेपरेटर परिणाम प्लेटफ़ॉर्म-विशिष्ट लाइन सेपरेटर है



24

जबकि \nयूनिक्स-आधारित सिस्टम के लिए सही न्यूलाइन वर्ण है, अन्य सिस्टम एक पंक्ति के अंत का प्रतिनिधित्व करने के लिए विभिन्न वर्णों का उपयोग कर सकते हैं। विशेष रूप से, विंडोज सिस्टम का उपयोग \r\n, और शुरुआती मैकओएस सिस्टम का उपयोग किया जाता है \r

%nअपने प्रारूप स्ट्रिंग का उपयोग करके , आप जावा को दिए गए मान का उपयोग करने के लिए कहते हैं System.getProperty("line.separator"), जो वर्तमान प्रणाली के लिए लाइन विभाजक है।


18

चेतावनी:

यदि आप नेटवर्किग कोड कर रहे हैं, तो आप इसकी निश्चितता को प्राथमिकता दे सकते हैं \n, %nजिसके विरोध में यह नेटवर्क के विभिन्न पात्रों को भेज सकता है, यह इस बात पर निर्भर करता है कि यह किस प्लेटफॉर्म पर चल रहा है।


8

"सही" इस पर निर्भर करता है कि आप वास्तव में क्या करना चाह रहे हैं।

\ n आपको हमेशा एक "यूनिक्स शैली" की समाप्ति प्रदान करेगा। \ r \ n आपको हमेशा एक "डॉस स्टाइल" लाइन देगा। % n आपको उस प्लेटफ़ॉर्म के लिए समाप्त होने वाली रेखा देगा जिस पर आप चल रहे हैं

C इसे अलग तरीके से हैंडल करता है। आप "टेक्स्ट" या "बाइनरी" मोड में एक फ़ाइल खोलने का विकल्प चुन सकते हैं। यदि आप फ़ाइल को बाइनरी मोड में खोलते हैं तो \ n आपको "यूनिक्स स्टाइल" लाइन समाप्त करने के लिए देगा और "\ r \ n" आपको "डॉस स्टाइल" लाइन समाप्त करने देगा। यदि आप डॉस / विंडोज सिस्टम पर फाइल को "टेक्स्ट" मोड में खोलते हैं, तो जब आप \ n लिखते हैं तो फाइल हैंडलिंग कोड इसे \ r \ n में बदल देता है। इसलिए टेक्स्ट मोड में एक फ़ाइल खोलकर और \ n का उपयोग करके आप प्लेटफ़ॉर्म की विशिष्ट लाइन को समाप्त करते हैं।

मैं देख सकता हूं कि जावा के डिजाइनर "पाठ" और "बाइनरी" फ़ाइल मोड के बारे में सी के हैकी विचारों को दोहराने के लिए क्यों नहीं चाहते थे।


4

जावा में, \nहमेशा \u000Aलाइनफीड चरित्र उत्पन्न करें । विशेष मंच के उपयोग के लिए सही लाइन विभाजक प्राप्त करने के लिए %n

इसलिए उपयोग करें \nजब आप सुनिश्चित हों कि आपको \u000Aनेटवर्किंग में उदाहरण के लिए लाइनफीड चरित्र की आवश्यकता है ।
अन्य सभी स्थितियों में उपयोग करें%n


4

सूचना इन उत्तरों केवल सत्य हैं का उपयोग करते समय System.out.printf()या System.out.format()या Formatterवस्तु। यदि आप में उपयोग करते %nहैं System.out.println(), तो यह केवल एक उत्पादन करेगा %n, न कि एक नई रेखा।


0

% n प्रारूप विनिर्देशक एक लाइन विभाजक है जो ऑपरेटिंग सिस्टम में पोर्टेबल है। हालाँकि, यह System.out.print या System.out.println फ़ंक्शन के तर्क के रूप में उपयोग नहीं किया जा सकता है।

यह हमेशा लाइन सेपरेटर के इस नए संस्करण का उपयोग करने के लिए अनुशंसित है \ n ऊपर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.