2010-06-01 4 views
6

स्ट्रिंग प्लेसहोल्डर बनाने के लिए आप किन कक्षाओं का उपयोग करते हैं?स्ट्रिंग टेम्पलेट्स बनाने के लिए आप किन कक्षाओं का उपयोग करते हैं?

String template = "You have %1 tickets for %d", 
Brr object = new Brr(template, {new Integer(1), new Date()}); 
object.print(); 

उत्तर

9

को सक्षम करने की अनुमति देता है आप दो विकल्प हैं:

  • java.util.Formatter
    • printf शैली प्रारूप स्ट्रिंग्स के लिए एक दुभाषिया। यह वर्ग लेआउट औचित्य और संरेखण, संख्यात्मक, स्ट्रिंग, और दिनांक/समय डेटा, और लोकेल-विशिष्ट आउटपुट के लिए सामान्य प्रारूपों के लिए समर्थन प्रदान करता है।
  • java.text.MessageFormat
    • MessageFormat एक भाषा-तटस्थ तरीके से समेकित संदेशों को उत्पन्न करने का माध्यम प्रदान करता है। अंतिम उपयोगकर्ताओं के लिए प्रदर्शित संदेशों को बनाने के लिए इसका इस्तेमाल करें।
दो के

, MessageFormat कहीं अधिक शक्तिशाली कर रहा है। यहाँ ChoiceFormat का उपयोग कर 0, 1 संभाल करने का एक उदाहरण है, और अलग ढंग से >1 मामला:

import java.text.MessageFormat; 
import java.util.Date; 
//... 

String p = "You have {0,choice,0#none|1#one ticket|1<{0,number,integer} tickets} for {1,date,full}."; 
for (int i = 0; i < 4; i++) { 
    System.out.println(MessageFormat.format(p, i, new Date())); 
} 

यह प्रिंट:

You have none for Tuesday, June 1, 2010. 
You have one ticket for Tuesday, June 1, 2010. 
You have 2 tickets for Tuesday, June 1, 2010. 
You have 3 tickets for Tuesday, June 1, 2010. 

प्रलेखन कई और अधिक उदाहरण है।

5

कैसे java.util.Formatter?

इसके लिए शॉर्टैंड्स में String.format और System.out.format शामिल हैं।

String s = String.format("%s %s", "Hello", "World!"); 

आप, मानकों का एक चर संख्या के साथ यह कॉल कर सकते हैं जैसे मैं ऊपर से पता चला है, या यह Object की एक सरणी गुजरती हैं और यह है कि का उपयोग करेंगे:

4

निम्नलिखित काम करना चाहिए:

import java.util.*; 


class Brr { 
    String template; 
    Object[] args; 
    public Brr(String template, Object... args) { 
     this.template = template; 
     this.args = args; 
    } 
    public void print() { 
     System.out.println(String.format(template, args)); 
    } 
} 

public class Test { 
    public static void main(String... args) { 
     String template = "You have %d tickets for %tF"; 
     Brr object = new Brr(template, new Integer(1), new Date()); 
     object.print(); 
    } 
} 

आउटपुट:

You have 1 tickets for 2010-06-01 

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html पर एक नज़र डालें यदि आप रूपांतरण का पूरा संदर्भ चाहते हैं।

1

MessageFormat.format() मुझे क्रमसूचक पैरामीटर का उपयोग करने, इस तरह आसानी से i18n

private final Map<String, String> localizedMessages = new HashMap<String, String>(); 

private void init() { 
    this.localizedMessages.put("de_DE", "{2} Suchtreffer, zeige Ergebnisse ${0} bis ${1}"); 
    this.localizedMessages.put("en_US", "Showing results {0} through {1} of a total {2"); 
} 

public String getLocalizedMessage(final String locale, 
     final Integer startOffset, final Integer endOffset, 
     final Integer totalResults) { 
    return MessageFormat.format(this.localizedMessages.get(locale), 
      startOffset, endOffset, totalResults); 

} 
1

आप templating स्ट्रिंग्स के लिए कुछ और भी अधिक शक्तिशाली की जरूरत है अपाचे वेग पुस्तकालय आप की तरह कुछ करने की अनुमति देता है http://velocity.apache.org/

0

लय एक जावा टेम्पलेट इंजन अब एक नई सुविधा के साथ जारी String interpolation mode कहा जाता है सुंदर उपयोगी है:

String result = Rythm.render("You have @num tickets for @date", 1, new Date()); 

उपरोक्त मामले से पता चलता है कि आप स्थिति के आधार पर टेम्पलेट को तर्क दे सकते हैं।

Map<String, Object> args = new HashMap<String, Object>(); 
args.put("num", 1); 
args.put("date", new Date()); 
String result = Rythm.render("You have @num tickets for @date", args); 

लिंक::

डाउनलोड लय भी आप नाम से तर्क पारित करने के लिए अनुमति देता है
संबंधित मुद्दे

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