2011-07-31 7 views
89
String hello = "Hello"; 

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello); 

hello hello hello hello hello hello 

क्या हैलो वैरिएबल को प्रारूप विधि में कॉल में कई बार दोहराया जाना चाहिए या क्या एक शॉर्टेंड संस्करण है जो आपको %s टोकन पर लागू होने के लिए तर्क निर्दिष्ट करने देता है?क्या आप स्ट्रिंग.फॉर्मैट में एक ही पैरामीटर एकाधिक बार प्राप्त कर चुके हैं?

उत्तर

189
the docs से

:

%[argument_index$][flags][width][.precision]conversion 

वैकल्पिक argument_index एक दशमलव पूर्णांक का संकेत देती है:

  • सामान्य, चरित्र के लिए प्रारूप विनिर्देशक, और संख्यात्मक प्रकार निम्न सिंटैक्स है तर्क सूची में तर्क की स्थिति। पहला तर्क "1$" द्वारा संदर्भित है, "2$" ने दूसरा, आदि

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello); 
22

एक अन्य विकल्प रिश्तेदार अनुक्रमण उपयोग करने के लिए है: फॉर्मेट स्पेसिफायर का संदर्भ पिछले फॉर्मेट स्पेसिफायर रूप में एक ही तर्क।

उदाहरण के लिए: hello hello hello hello में

String.format("%s %<s %<s %<s", "hello") 

का परिणाम है।

+0

https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dpos: एक बार प्रारूप सही प्रतीत होता है, रिक्त स्थान पाठ संपादक में हटाया जा सकता है – Vadzim

0

String.format में तर्क का पुन: उपयोग करने के लिए एक आम मामला एक विभाजक (उदा। ";" सीएसवी या कंसोल के लिए टैब) के साथ है।

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c")); 
// "a ; ; ; b" 

यह वांछित आउटपुट नहीं है। "c" कहीं भी दिखाई नहीं देता है।

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c")); 
// "a ; b ; c" 

रिक्त स्थान पठनीयता और डीबगिंग के लिए जोड़ रहे हैं:

आप विभाजक पहले (%s साथ) का उपयोग करने और केवल निम्न आवृत्तियां के लिए तर्क सूचकांक (%2$s) का उपयोग की जरूरत है।

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c")); 
// "a;b;c" 
संबंधित मुद्दे

 संबंधित मुद्दे