आदिम प्रश्न, लेकिन मैं इस तरह से तार कैसे प्रारूपित करूं:
"स्टेप {1} ऑफ {2}"
जावा का उपयोग करके चर को प्रतिस्थापित करके? C # में यह आसान है।
आदिम प्रश्न, लेकिन मैं इस तरह से तार कैसे प्रारूपित करूं:
"स्टेप {1} ऑफ {2}"
जावा का उपयोग करके चर को प्रतिस्थापित करके? C # में यह आसान है।
जवाबों:
String.format के अतिरिक्त, एक बार भी देखें java.text.MessageFormat
। आपके द्वारा प्रदान किए गए C # उदाहरण के लिए प्रारूप कम प्रचलित और थोड़ा सा करीब है और आप इसे पार्स करने के लिए भी उपयोग कर सकते हैं।
उदाहरण के लिए:
int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));
एक अच्छा उदाहरण जावा 1.5 में varargs और ऑटोबॉक्सिंग सुधार का लाभ उठाता है और ऊपर एक-लाइनर में बदल जाता है:
MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");
MessageFormat
पसंद संशोधक के साथ i18nized plurals करने के लिए थोड़ा सा अच्छा है। संदेश को निर्दिष्ट करने के लिए जो एक चर 1 और बहुवचन के रूप में एकवचन रूप का सही ढंग से उपयोग करता है अन्यथा, आप ऐसा कुछ कर सकते हैं:
String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });
MessageFormat.format("Number {0}", 1234));
डिफ़ॉल्ट लोकेल के आधार पर निम्न कोड Number 1,234
इसके बजाय उत्पादन कर सकता है Number 1234
।
{0} it ll take firstname
जब {1} then lastname
, जैसे , तब । क्या ऐसा संभव है {0,choice,0.getFirstName()}
या ऐसा कुछ है?
String.format पर एक नज़र डालें । हालाँकि, यह नोट करता है कि यह सी के फंतासी फ़ंक्शंस के समान प्रारूप निर्दिष्ट करता है - उदाहरण के लिए:
String.format("Hello %s, %d", "world", 42);
"हैलो वर्ल्ड, 42" लौटाएगा। प्रारूप निर्दिष्टकर्ताओं के बारे में सीखते समय आपको यह मददगार लग सकता है । एंडी थॉमस-क्रैमर इस लिंक को नीचे एक टिप्पणी में छोड़ने के लिए पर्याप्त था , जो आधिकारिक कल्पना को इंगित करता है। सबसे अधिक इस्तेमाल किए जाने वाले हैं:
यह मौलिक रूप से C # से अलग है, जो एक वैकल्पिक प्रारूप विनिर्देशक के साथ स्थितीय संदर्भों का उपयोग करता है। इसका मतलब है कि आप ऐसा नहीं कर सकते हैं:
String.format("The {0} is repeated again: {0}", "word");
... वास्तव में प्रिंटफ़ / प्रारूप में दिए गए पैरामीटर को दोहराए बिना। (नीचे द स्क्राम मिस्टर की टिप्पणी देखें)
यदि आप सीधे परिणाम प्रिंट करना चाहते हैं, तो आपको अपनी पसंद के अनुसार System.out.printf ( PrintStream.printf ) मिल सकता है ।
String.format
न्यूमेरिक पोजिशन भी ले सकते हैं: String.format("%2$s %1$s", "foo", "bar");
आउटपुटbar foo
यदि आप String.format का उपयोग नहीं करना चुनते हैं, तो दूसरा विकल्प + बाइनरी ऑपरेटर है
String str = "Step " + a + " of " + b;
इस के बराबर है
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
जो भी आप उपयोग करते हैं वह आपकी पसंद है। StringBuilder तेज है, लेकिन गति अंतर मामूली है। मैं +
ऑपरेटर का उपयोग करना पसंद करता हूं (जो ए करता है StringBuilder.append(String.valueOf(X)))
और पढ़ने में आसान लगता है।
+
ऑपरेटर कैसे काम करता है। 2) आपका स्पष्टीकरण भी सटीक नहीं है। +
उपयोग करने के बराबर है StringBuilder
, नहीं String.concat
। (इस पर बहुत अधिक जानकारी।)
मैंने इसके लिए अपनी सरल विधि लिखी है:
public class SomeCommons {
/** Message Format like 'Some String {0} / {1}' with arguments */
public static String msgFormat(String s, Object... args) {
return new MessageFormat(s).format(args);
}
}
इसलिए आप इसका उपयोग इस प्रकार कर सकते हैं:
SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");
public class StringFormat {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.println(String.format("%-15s%03d",s1,x));
}
System.out.println("================================");
}
}
आउटपोट "================================"
ved15space123 ved15space123 ved15space123 "=========== =====================
जावा समाधान
"-" का उपयोग बाएं इंडेंट के लिए किया जाता है
"15" स्ट्रिंग की न्यूनतम लंबाई बनाता है जो कि 15 तक होती है
इस समाधान ने मेरे लिए काम किया। मुझे एक REST ग्राहक के लिए गतिशील रूप से url बनाने की आवश्यकता थी इसलिए मैंने यह विधि बनाई, इसलिए आपको बस इस तरह से resturl पास करना होगा
/customer/{0}/user/{1}/order
और आप की जरूरत के रूप में कई params जोड़ें:
public String createURL (String restURL, Object ... params) {
return new MessageFormat(restURL).format(params);
}
आपको बस इस तरीके को कॉल करना है:
createURL("/customer/{0}/user/{1}/order", 123, 321);
उत्पादन
"/ ग्राहक / 123 / उपयोगकर्ता / 321 / आदेश"
मैंने यह फ़ंक्शन लिखा है यह सिर्फ सही काम करता है। $
उसी नाम के चर के मान से शुरू होने वाले शब्द को इंटरपोल करें।
private static String interpol1(String x){
Field[] ffield = Main.class.getDeclaredFields();
String[] test = x.split(" ") ;
for (String v : test ) {
for ( Field n: ffield ) {
if(v.startsWith("$") && ( n.getName().equals(v.substring(1)) )){
try {
x = x.replace("$" + v.substring(1), String.valueOf( n.get(null)));
}catch (Exception e){
System.out.println("");
}
}
}
}
return x;
}