String.format में पैरामीटर का पुन: उपयोग करें?


136
String hello = "Hello";

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

hello hello hello hello hello hello 

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

जवाबों:


261

से डॉक्स :

  • सामान्य, वर्ण और संख्यात्मक प्रकारों के लिए प्रारूप विनिर्देशक में निम्नलिखित सिंटैक्स होते हैं:

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

    वैकल्पिक आर्ग्यूमेंट_इंडेक्स एक दशमलव पूर्णांक है जो तर्क सूची में तर्क की स्थिति को दर्शाता है। पहला तर्क द्वारा संदर्भित किया जाता है "1$", दूसरा द्वारा "2$"आदि।

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

64

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

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

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

में परिणाम hello hello hello hello



12

आपको %[argument_index$]निम्नलिखित के रूप में उपयोगकर्ता सूचकांक तर्क की आवश्यकता है :

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

परिणाम : hello hello hello hello hello hello


4

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

System.out.println(String.format("%s %2$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"

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

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.