`
sunxboy
  • 浏览: 2869433 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

利用MessageFormat格式化字符串实例

阅读更多

第一个例子使用静态的方法 MessageFormat.format ,它在内部创建一个只使用一次的 MessageFormat

 int planet = 7;
 String event = "a disturbance in the Force";

 String result = MessageFormat.format(
     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
     planet, new Date(), event);

输出为:

 At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.

下面的例子创建了一个可以重复使用的 MessageFormat 实例:

 int fileCount = 1273;
 String diskName = "MyDisk";
 Object[] testArgs = {new Long(fileCount), diskName};

 MessageFormat form = new MessageFormat(
     "The disk \"{1}\" contains {0} file(s).");

 System.out.println(form.format(testArgs));

不同 fileCount 值的输出:

 The disk "MyDisk" contains 0 file(s).
 The disk "MyDisk" contains 1 file(s).
 The disk "MyDisk" contains 1,273 file(s).

对于更复杂的模式,可以使用 ChoiceFormat 来生成正确的单数和复数形式:

 MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
 double[] filelimits = {0,1,2};
 String[] filepart = {"no files","one file","{0,number} files"};
 ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
 form.setFormatByArgumentIndex(0, fileform);

 int fileCount = 1273;
 String diskName = "MyDisk";
 Object[] testArgs = {new Long(fileCount), diskName};

 System.out.println(form.format(testArgs));

不同的 fileCount 值的输出:

 

 The disk "MyDisk" contains no files.
 The disk "MyDisk" contains one file.
 The disk "MyDisk" contains 1,273 files.

 

 

=============================================================

 

MessageFormat 使用以下形式的模式:

MessageFormatPattern:
String
MessageFormatPattern FormatElement String

FormatElement:
{ ArgumentIndex }
{ ArgumentIndex , FormatType }
{ ArgumentIndex , FormatType , FormatStyle }

FormatType: one of
number date time choice

FormatStyle:
short
medium
long
full
integer
currency
percent
SubformatPattern

String:
StringPartopt
String StringPart

StringPart:
''
' QuotedString '
UnquotedString

SubformatPattern:
SubformatPatternPartopt
SubformatPattern SubformatPatternPart

SubFormatPatternPart:
' QuotedPattern '
UnquotedPattern

 

在 String 中,"''" 表示单引号。QuotedString 可以包含除单引号之外的任意字符;围绕的单引号被移除。UnquotedString 可以包含除单引号和左花括号之外的任意字符。因此,格式化后消息字符串为 "'{0}'" 的字符串可以写作 "'''{'0}''" 或 "'''{0}'''"。

在 SubformatPattern 中,应用了不同的规则。QuotedPattern 可包含除单引号之外的任意字符,但不移除围绕的单引号,因此它们可以由子格式解释。例如,"{1,number,$'#',##}" 将产生一个带井号的数字格式,结果如:"$#31,45"。 UnquotedPattern 可以包含除单引号之外的任意字符,但其中的花括号必须成对出现。例如,"ab {0} de" 和 "ab '}' de" 是有效的子格式模式,而 "ab {0'}' de" 和 "ab } de" 则是无效的。

分享到:
评论

相关推荐

    利用MessageFormat格式化字符串实例资料.pdf

    MessageFormat是Java中用于格式化字符串的一个非常有用的类,它允许我们使用模板化的模式来插入变量值,并且支持多种格式,如数字、日期、时间等。这个类的主要优点在于其灵活性和可读性,使得代码更加清晰,易于...

    Java 实例 - 字符串格式化源代码-详细教程.zip

    在Java编程中,字符串格式化是一项非常重要的技能,它允许我们根据特定的模板来构造复杂的字符串,这在日志记录、输出报告或者处理用户界面显示时尤其有用。本教程将深入探讨Java中的字符串格式化技术,包括使用`...

    第8章 字符串处理

    8. **格式化字符串**:在C家族语言中,`printf`和`scanf`系列函数用于格式化输出和输入;在Java中,`String.format()`和`MessageFormat`类提供了类似的功能;在Python中,有`format()`方法和f-string。 9. **正则...

    Java中的MessageFormat.format用法实例

    总之,`MessageFormat.format`是Java中处理格式化字符串的关键工具,通过其提供的模式和参数,开发者可以方便地生成符合特定格式要求的字符串,同时支持多种数据类型的格式化,是实现多语言应用不可或缺的一部分。

    dotnet-MessageFormatNETNET的ICUMessageFormat实现

    2. **类型安全**:不同于简单的字符串格式化方法(如`string.Format`),MessageFormat.NET在编译时就能检查格式化字符串和传入参数的匹配性,避免运行时错误。 3. **兼容ICU规范**:MessageFormat.NET完全遵循ICU ...

    JAVA时间格式化处理

    `MessageFormat`类提供了类似于printf风格的字符串格式化功能,可以用来格式化日期和时间。下面是一个使用`MessageFormat`将当前时间格式化为“yyyy-MM-dd-HH-mm:ss:ms”格式的例子: ```java String dateTime = ...

    demo-Str.rar

    这可以通过格式化字符串完成,如`String name = "John"; int age = 30; String assembled = String.format("Name: %s, Age: %d", name, age);`,或者使用StringBuilder/Buffer的append方法。 3. 字符串截取:Java...

    JAVA发送邮件实现,消息格式化

    例如,假设我们有一个模板字符串`"欢迎,{0}!"`,我们可以使用`MessageFormat.format()`方法将"{0}"替换为用户的名字: ```java String template = "欢迎,{0}!"; String formatted = MessageFormat.format...

    java类Formatter解析.pdf

    例如,创建Formatter对象并直接格式化输出到System.out,创建GregorianCalendar实例进行日期时间格式化,使用String.format()进行字符串的格式化,并且在例子中还使用了String.format()方法来格式化浮点数和整数。...

    JAVA时间格式化处理.pdf

    在给定的代码示例中,我们看到了如何使用`MessageFormat`、`SimpleDateFormat`和`Calendar`进行日期格式化: 1. 使用`MessageFormat.format()`方法,我们可以将日期对象格式化为字符串。这里的`{0,date,yyyy-MM-dd-...

    前端项目-intl-messageformat.zip

    2. **创建MessageFormat对象**:创建一个`IntlMessageFormat`实例,传入ICU消息字符串和所需的locale。例如: ```javascript const message = new IntlMessageFormat('你有{count, number}条未读消息', 'zh-CN'); ...

    JAVA时间格式化处理-JAVA程序员JAVA工程师面试必看.pdf

    例如,在代码段中,`new SimpleDateFormat("yyyy MM dd HH mm ss")`创建了一个`SimpleDateFormat`实例,然后使用`format()`方法将`Date`对象转换为字符串,按照指定的格式"yyyy MM dd HH mm ss"。 3. `...

    Java期末复习-常用类库

    ResourceBundle的getBundle方法用于加载指定语言环境的资源包,MessageFormat的applyPattern和format方法则用来格式化文本并填充动态内容。 日期操作类通常包括java.util.Date,java.util.Calendar,以及java.text....

    Java国际化的1

    Java提供了几种格式化工具来处理日期、数字和字符串,以适应不同的文化习惯: - **DataFormat**:这是一个抽象类,提供了日期和时间的格式化。它的子类`SimpleDateFormat`可以创建自定义的日期和时间模式。 - *...

    09 Spring IoC容器ApplicationContext如何实现国际化慕课专栏1

    2. MessageFormat:格式化输出字符串,处理占位符。 3. ResourceBundle.Control:自定义加载策略,以优化资源文件的查找。 理解这些基本概念和机制后,我们可以灵活地在Spring应用中实现国际化,为全球用户提供更加...

    javaweb 国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    5. 使用MessageFormat类来格式化含有占位符的消息; 6. 将这些类和资源包组合在一起,实现对多语言用户界面的支持。 例如,如果我们有一个资源文件"messages.properties"定义了用户界面的文本,同时我们还准备了...

    java技术教你如何实现国际化

    除了使用.properties文件,Java还提供了`java.util.Formatter`和`java.text.MessageFormat`类,用于格式化和组合字符串,这样可以处理包含变量的文本。例如,`MessageFormat.format()`方法允许我们在字符串中插入...

Global site tag (gtag.js) - Google Analytics