public class MessageFormat
extends UFormat
java.lang.Object | |||
↳ | java.text.Format | ||
↳ | android.icu.text.UFormat | ||
↳ | android.icu.text.MessageFormat |
[icu增强] ICU更换为MessageFormat
。 ICU特有的方法,字段和其他功能标记为“ [icu] ”。
MessageFormat通过可选参数(变量/占位符)准备用于显示给用户的字符串。 参数可以以任何顺序出现,这对于将语言翻译成具有不同语法的语言是必需的。
一个MessageFormat是由一个 模式字符串构造的,该 模式字符串的参数将在{花括号}中被替换为格式化值。
MessageFormat
与其他Format
类不同之处在于您使用其构造函数之一(而不是getInstance
样式工厂方法)创建了MessageFormat
对象。 工厂方法并不是必需的,因为MessageFormat
本身并未实现特定于语言环境的行为。 任何特定于语言环境的行为都由您提供的模式和用于插入参数的子格式定义。
参数可以命名(使用标识符)或编号(使用小ASCII码整数)。 某些API方法仅适用于参数号,如果该模式具有命名参数,则会引发异常(请参阅usesNamedArguments()
)。
参数可能不指定任何格式类型。 在这种情况下,Number值使用默认值(对于语言环境)NumberFormat进行格式化,Date值使用默认值(对于语言环境)DateFormat格式化,对于任何其他值使用toString()值格式化。
参数可能会指定一个“简单”类型,为其指定的Format对象被创建,缓存和使用。
参数可能具有嵌套的MessageFormat子模式的“复杂”类型。 在格式化过程中,根据参数值选择其中一个子消息并递归格式化。
构建完成后,可以为顶级参数设置自定义的Format对象,覆盖该参数的默认格式和解析行为。 但是,通过在模式字符串中写入一个无类型的参数并为其提供预格式化的字符串值,可以更简单地实现自定义格式。
格式化时,MessageFormat接收参数值的集合并写入输出字符串。 参数值可以作为数组传递(当模式只包含编号参数时)或者作为Map(对于命名参数和编号参数都有效)传递。
通过数组索引或映射键将每个参数与其中一个输入值进行匹配,并根据其模式规范进行格式设置(如果已设置,则使用自定义格式对象)。 编号模式参数与包含该数字的映射键匹配为ASCII十进制数字串(不包含前导零)。
MessageFormat
uses patterns of the following form:
message = messageText (argument messageText)* argument = noneArg | simpleArg | complexArg complexArg = choiceArg | pluralArg | selectArg | selectordinalArg noneArg = '{' argNameOrNumber '}' simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}' choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}' pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}' selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}' selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}' choiceStyle: seeChoiceFormat
pluralStyle: seePluralFormat
selectStyle: seeSelectFormat
argNameOrNumber = argName | argNumber argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+ argNumber = '0' | ('1'..'9' ('0'..'9')*) argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration" argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText
MessagePattern.ApostropheMode
建议:对于人类可读的文本使用真正的撇号(单引号)字符,并仅在程序语法中使用ASCII撇号(''),如在MessageFormat中引用。 请参阅Unicode标准中的U + 0027撇号注释。
choice
参数类型已弃用。 使用plural
参数进行适当的复数选择,并使用select
参数在一组固定选项中进行简单选择。
argType
和argStyle
值用于为格式元素创建Format
实例。 下表显示了这些值如何映射到Format实例。 表中未显示的组合是非法的。 任何argStyleText
必须是所使用的Format子类的有效模式字符串。
argType | argStyle | resulting Format object |
---|---|---|
(none) | null |
|
number |
(none) | NumberFormat.getInstance(getLocale()) |
integer |
NumberFormat.getIntegerInstance(getLocale()) |
|
currency |
NumberFormat.getCurrencyInstance(getLocale()) |
|
percent |
NumberFormat.getPercentInstance(getLocale()) |
|
argStyleText | new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale())) |
|
date |
(none) | DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale()) |
short |
DateFormat.getDateInstance(DateFormat.SHORT, getLocale()) |
|
medium |
DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale()) |
|
long |
DateFormat.getDateInstance(DateFormat.LONG, getLocale()) |
|
full |
DateFormat.getDateInstance(DateFormat.FULL, getLocale()) |
|
argStyleText | new SimpleDateFormat(argStyleText, getLocale()) |
|
time |
(none) | DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale()) |
short |
DateFormat.getTimeInstance(DateFormat.SHORT, getLocale()) |
|
medium |
DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale()) |
|
long |
DateFormat.getTimeInstance(DateFormat.LONG, getLocale()) |
|
full |
DateFormat.getTimeInstance(DateFormat.FULL, getLocale()) |
|
argStyleText | new SimpleDateFormat(argStyleText, getLocale()) |
|
spellout |
argStyleText (optional) | new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT) |
ordinal |
argStyleText (optional) | new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL) |
duration |
argStyleText (optional) | new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION) |
ICU MessageFormat支持命名和编号参数,而JDK MessageFormat仅支持编号参数。 命名的参数使模式更具可读性。
ICU实现了更加用户友好的撇号引用语法。 在消息文本中,如果撇号紧接在语法字符前面(通常是{花括号}),则它只会开始引用文字文本。
在JDK MessageFormat中,一个撇号总是开始引用,这需要像“do not”和“aujourd'hui”这样的普通文本使用像“don''t”和“aujourd''hui”这样的双撇号来书写。 欲了解更多详情,请参阅MessagePattern.ApostropheMode
。
ICU不会为choiceArg,pluralArg或selectArg创建ChoiceFormat对象,而是自己处理这些参数。 JDK MessageFormat确实创建并使用ChoiceFormat对象( new ChoiceFormat(argStyleText)
)。 JDK根本不支持复数和选择参数。
以下是一些使用示例:
Typically, the message format will come from resources, and the arguments will be dynamically set at runtime.Object[] arguments = { 7, new Date(System.currentTimeMillis()), "a disturbance in the Force" }; String result = MessageFormat.format( "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.", arguments); output: At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
例2:
Object[] testArgs = { 3, "MyDisk" }; MessageFormat form = new MessageFormat( "The disk \"{1}\" contains {0} file(s)."); System.out.println(form.format(testArgs)); // output, with different testArgs output: The disk "MyDisk" contains 0 file(s). output: The disk "MyDisk" contains 1 file(s). output: The disk "MyDisk" contains 1,273 file(s).
对于包含复数形式的消息,可以使用复数形式:
MessageFormat msgFmt = new MessageFormat( "{num_files, plural, " + "=0{There are no files on disk \"{disk_name}\".}" + "=1{There is one file on disk \"{disk_name}\".}" + "other{There are # files on disk \"{disk_name}\".}}", ULocale.ENGLISH); Map args = new HashMap(); args.put("num_files", 0); args.put("disk_name", "MyDisk"); System.out.println(msgFmt.format(args)); args.put("num_files", 3); System.out.println(msgFmt.format(args)); output: There are no files on disk "MyDisk". There are 3 files on "MyDisk".See
PluralFormat
and
PluralRules
for details.
MessageFormats不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问一个格式,它必须在外部同步。
Nested classes |
|
---|---|
class |
MessageFormat.Field 定义从 |
Public constructors |
|
---|---|
MessageFormat(String pattern) 构造默认的 |
|
MessageFormat(String pattern, Locale locale) 为指定的语言环境和模式构造MessageFormat。 |
|
MessageFormat(String pattern, ULocale locale) 为指定的语言环境和模式构造MessageFormat。 |
Public methods |
|
---|---|
void |
applyPattern(String pttrn) 设置此消息格式使用的模式。 |
void |
applyPattern(String pattern, MessagePattern.ApostropheMode aposMode) [icu]设置此消息格式所使用的ApostropheMode和模式。 |
static String |
autoQuoteApostrophe(String pattern) [icu]将'撇号友好'模式转换为标准模式。 |
Object |
clone() 创建并返回此对象的副本。 |
boolean |
equals(Object obj) 指示其他某个对象是否“等于”这一个。 |
final StringBuffer |
format(Object[] arguments, StringBuffer result, FieldPosition pos) 格式化对象数组,并将 |
static String |
format(String pattern, Map<String, Object> arguments) 用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。 |
final StringBuffer |
format(Object arguments, StringBuffer result, FieldPosition pos) 格式化地图或对象数组,并将 |
final StringBuffer |
format(Map<String, Object> arguments, StringBuffer result, FieldPosition pos) 格式地图上的对象并追加 |
static String |
format(String pattern, Object... arguments) 用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。 |
AttributedCharacterIterator |
formatToCharacterIterator(Object arguments) 格式化一组对象并将它们插入到 |
MessagePattern.ApostropheMode |
getApostropheMode() [ICU] |
Set<String> |
getArgumentNames() [icu]返回顶级参数名称。 |
Format |
getFormatByArgumentName(String argumentName) [icu]返回与给定参数名称关联的第一个顶级格式。 |
Format[] |
getFormats() 返回用于先前设置的模式字符串中格式元素的Format对象。 |
Format[] |
getFormatsByArgumentIndex() 返回用于传递给 |
Locale |
getLocale() 返回创建或比较子格式时使用的语言环境。 |
ULocale |
getULocale() [icu]返回创建参数Format对象时使用的语言环境。 |
int |
hashCode() 返回对象的哈希码值。 |
Object[] |
parse(String source) 从给定字符串的开头分析文本以生成对象数组。 |
Object[] |
parse(String source, ParsePosition pos) 分析字符串。 |
Object |
parseObject(String source, ParsePosition pos) 分析字符串中的文本以生成对象数组或映射。 |
Map<String, Object> |
parseToMap(String source) [icu]解析给定字符串开始处的文本,以生成从参数到值的映射。 |
Map<String, Object> |
parseToMap(String source, ParsePosition pos) [icu]解析字符串,将结果返回到Map中。 |
void |
setFormat(int formatElementIndex, Format newFormat) 将格式对象设置为在先前设置的模式字符串中用于具有给定格式元素索引的格式元素。 |
void |
setFormatByArgumentIndex(int argumentIndex, Format newFormat) 设置Format对象以用于之前设置的模式字符串中使用给定参数索引的格式元素。 |
void |
setFormatByArgumentName(String argumentName, Format newFormat) [icu]将Format对象设置为用于先前设置的模式字符串中使用给定参数名称的格式元素。 |
void |
setFormats(Format[] newFormats) 设置Format对象以用于先前设置的模式字符串中的格式元素。 |
void |
setFormatsByArgumentIndex(Format[] newFormats) 设置Format对象以用于传递给 |
void |
setFormatsByArgumentName(Map<String, Format> newFormats) [icu]将Format对象设置为用于传递到 |
void |
setLocale(ULocale locale) 设置用于创建参数格式化对象的区域设置。 |
void |
setLocale(Locale locale) 设置用于创建参数格式化对象的区域设置。 |
String |
toPattern() 返回应用的模式字符串。 |
boolean |
usesNamedArguments() [icu]如果此MessageFormat使用命名参数,则返回true,否则返回false。 |
Inherited methods |
|
---|---|
From class java.text.Format
|
|
From class java.lang.Object
|
MessageFormat (String pattern)
构造默认FORMAT
区域设置和指定模式的MessageFormat。 设置语言环境并调用applyPattern(模式)。
Parameters | |
---|---|
pattern |
String : the pattern for this message format |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
也可以看看:
MessageFormat (String pattern, Locale locale)
为指定的语言环境和模式构造MessageFormat。 设置语言环境并调用applyPattern(模式)。
Parameters | |
---|---|
pattern |
String : the pattern for this message format |
locale |
Locale : the locale for this message format |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
MessageFormat (String pattern, ULocale locale)
为指定的语言环境和模式构造MessageFormat。 设置语言环境并调用applyPattern(模式)。
Parameters | |
---|---|
pattern |
String : the pattern for this message format |
locale |
ULocale : the locale for this message format |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
void applyPattern (String pttrn)
设置此消息格式使用的模式。 分析模式并为简单参数类型缓存Format对象。 模式及其解释在class description中指定。
Parameters | |
---|---|
pttrn |
String : the pattern for this message format |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
void applyPattern (String pattern, MessagePattern.ApostropheMode aposMode)
[icu]设置此消息格式所使用的ApostropheMode和模式。 分析模式并为简单参数类型缓存Format对象。 模式及其解释在class description中指定。
对于给定的对象,此方法最好只使用一次,以避免对模式造成混淆,并且在使用空的模式字符串构造对象以最小化开销之后。
Parameters | |
---|---|
pattern |
String : the pattern for this message format |
aposMode |
MessagePattern.ApostropheMode : the new ApostropheMode |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
String autoQuoteApostrophe (String pattern)
[icu]将'撇号友好'模式转换为标准模式。 对于ICU 4.8和更高版本的MessageFormat模式字符串,这已过时。 它可以与MessageFormat
一起使用。
有关撇号和引用以及ICU和 MessageFormat
之间的差异,请参阅班级说明。
MessageFormat
和ICU 4.6及更早版本的MessageFormat将所有ASCII撇号视为引号,这在某些语言中是有问题的,例如法语,其中通常使用撇号。 该实用程序假定只有紧跟在括号之前的不成对的撇号是真实的引号。 其他未配对的撇号已配对,并返回生成的标准模式字符串。
注意 :不能保证返回的模式确实是一个有效的模式。 唯一的影响是在具有不同引用语义的模式之间进行转换。
注意 :此方法仅适用于顶层messageText,而不适用嵌套在complexArg内的messageText。
Parameters | |
---|---|
pattern |
String : the 'apostrophe-friendly' pattern to convert |
Returns | |
---|---|
String |
the standard equivalent of the original pattern |
boolean equals (Object obj)
指示其他某个对象是否“等于”这一个。
equals
方法在非空对象引用上实现等价关系:
x
, x.equals(x)
should return true
. x
and y
, x.equals(y)
should return true
if and only if y.equals(x)
returns true
. x
, y
, and z
, if x.equals(y)
returns true
and y.equals(z)
returns true
, then x.equals(z)
should return true
. x
and y
, multiple invocations of x.equals(y)
consistently return true
or consistently return false
, provided no information used in equals
comparisons on the objects is modified. x
, x.equals(null)
should return false
. 类Object
的equals
方法实现了对象上最可能的等价关系; 也就是说,对于任何非空参考值x
和y
,当且仅当x
和y
指向同一对象( x == y
的值为true
)时,此方法返回true
。
请注意,无论何时覆盖此方法,通常都需要覆盖 hashCode
方法,以便维护 hashCode
方法的一般合同,该方法声明相等对象必须具有相同的哈希代码。
Parameters | |
---|---|
obj |
Object : the reference object with which to compare. |
Returns | |
---|---|
boolean |
true if this object is the same as the obj argument; false otherwise. |
StringBuffer format (Object[] arguments, StringBuffer result, FieldPosition pos)
格式化对象数组,并将 MessageFormat
的模式(其参数替换为格式化对象)附加到提供的 StringBuffer
。
替换各个格式元素的文本是从格式元素的当前子格式和格式元素的参数索引处的arguments
元素派生的,如下表的第一个匹配行所示。 如果arguments
是null
或少于argumentIndex + 1元素,则参数不可用 。 当参数不可用时,不执行替换。
argType or Format | value object | Formatted Text |
---|---|---|
any | unavailable | "{" + argNameOrNumber + "}" |
any | null |
"null" |
custom Format != null |
any | customFormat.format(argument) |
noneArg, or custom Format == null |
instanceof Number |
NumberFormat.getInstance(getLocale()).format(argument) |
noneArg, or custom Format == null |
instanceof Date |
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getLocale()).format(argument) |
noneArg, or custom Format == null |
instanceof String |
argument |
noneArg, or custom Format == null |
any | argument.toString() |
complexArg | any | result of recursive formatting of a selected sub-message |
如果pos
非空,并且引用Field.ARGUMENT
,则返回第一个格式化字符串的位置。 只有格式不使用命名参数时才支持此方法,否则会引发IllegalArgumentException。
Parameters | |
---|---|
arguments |
Object : an array of objects to be formatted and substituted. |
result |
StringBuffer : where text is appended. |
pos |
FieldPosition : On input: an alignment field, if desired. On output: the offsets of the alignment field. |
Returns | |
---|---|
StringBuffer |
Throws | |
---|---|
IllegalArgumentException |
if a value in the arguments array is not of the type expected by the corresponding argument or custom Format object. |
IllegalArgumentException |
if this format uses named arguments |
String format (String pattern, Map<String, Object> arguments)
用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。 该模式必须按名称而不是数字来标识参数。
Parameters | |
---|---|
pattern |
String
|
arguments |
Map
|
Returns | |
---|---|
String |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
IllegalArgumentException |
if a value in the arguments array is not of the type expected by the corresponding argument or custom Format object. |
StringBuffer format (Object arguments, StringBuffer result, FieldPosition pos)
格式化地图或对象数组,并将MessageFormat
的模式(格式化元素替换为格式化对象) StringBuffer
到提供的StringBuffer
。 这相当于任一个
A map must be provided if this format uses named arguments, otherwise an IllegalArgumentException will be thrown.
format
((Object[]) arguments, result, pos)
format
((Map) arguments, result, pos)
Parameters | |
---|---|
arguments |
Object : a map or array of objects to be formatted |
result |
StringBuffer : where text is appended |
pos |
FieldPosition : On input: an alignment field, if desired On output: the offsets of the alignment field |
Returns | |
---|---|
StringBuffer |
the string buffer passed in as toAppendTo , with formatted text appended |
Throws | |
---|---|
IllegalArgumentException |
if an argument in arguments is not of the type expected by the format element(s) that use it |
IllegalArgumentException |
if arguments is an array of Object and this format uses named arguments |
StringBuffer format (Map<String, Object> arguments, StringBuffer result, FieldPosition pos)
格式化对象的映射并将 MessageFormat
的模式附加到提供的 StringBuffer
,并将格式化对象替换为参数。
替换单个格式元素的文本是从格式元素的当前子格式导出的,并且 arguments
值将对应于格式元素的参数名称。
编号模式参数与包含该数字的映射键匹配为ASCII十进制数字串(不包含前导零)。
如果arguments
是null
或者模式中没有与参数名称对应的值,则参数不可用 。 当参数不可用时,不执行替换。
Parameters | |
---|---|
arguments |
Map : a map of objects to be formatted and substituted. |
result |
StringBuffer : where text is appended. |
pos |
FieldPosition : On input: an alignment field, if desired. On output: the offsets of the alignment field. |
Returns | |
---|---|
StringBuffer |
the passed-in StringBuffer |
Throws | |
---|---|
IllegalArgumentException |
if a value in the arguments array is not of the type expected by the corresponding argument or custom Format object. |
String format (String pattern, Object... arguments)
用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。 这相当于
(new MessageFormat
(pattern)).format
(arguments, new StringBuffer(), null).toString()
Parameters | |
---|---|
pattern |
String
|
arguments |
Object
|
Returns | |
---|---|
String |
Throws | |
---|---|
IllegalArgumentException |
if the pattern is invalid |
IllegalArgumentException |
if a value in the arguments array is not of the type expected by the corresponding argument or custom Format object. |
IllegalArgumentException |
if this format uses named arguments |
AttributedCharacterIterator formatToCharacterIterator (Object arguments)
格式化一组对象并将它们插入到MessageFormat
的模式中,产生一个AttributedCharacterIterator
。 您可以使用返回的AttributedCharacterIterator
来生成结果字符串,以及确定有关生成的字符串的信息。
返回的 AttributedCharacterIterator
的文本与将返回的文本相同
format
(arguments, new StringBuffer(), null).toString()
此外, AttributedCharacterIterator
至少包含指示arguments
数组中参数生成文本的属性。 这些属性的键类型为MessageFormat.Field
,它们的值为Integer
对象,该对象指示生成文本的参数的arguments
数组中的索引。
从底层的属性/值Format
实例即MessageFormat
用途也将被放置在所得AttributedCharacterIterator
。 这使您不仅可以找到参数在结果字符串中的位置,而且还可以找到它包含的字段。
Parameters | |
---|---|
arguments |
Object : an array of objects to be formatted and substituted. |
Returns | |
---|---|
AttributedCharacterIterator |
AttributedCharacterIterator describing the formatted value. |
Throws | |
---|---|
NullPointerException |
if arguments is null. |
IllegalArgumentException |
if a value in the arguments array is not of the type expected by the corresponding argument or custom Format object. |
MessagePattern.ApostropheMode getApostropheMode ()
[ICU]
Returns | |
---|---|
MessagePattern.ApostropheMode |
this instance's ApostropheMode. |
Set<String> getArgumentNames ()
[icu]返回顶级参数名称。 有关更多详细信息,请参阅setFormatByArgumentName(String, Format)
。
Returns | |
---|---|
Set<String> |
a Set of argument names |
Format getFormatByArgumentName (String argumentName)
[icu]返回与给定参数名称关联的第一个顶级格式。 有关更多详细信息,请参阅setFormatByArgumentName(String, Format)
。
Parameters | |
---|---|
argumentName |
String : The name of the desired argument. |
Returns | |
---|---|
Format |
the Format associated with the name, or null if there isn't one. |
Format[] getFormats ()
返回用于先前设置的模式字符串中格式元素的Format对象。 返回数组中格式的顺序对应于模式字符串中格式元素的顺序。
由于模式字符串中格式元素的顺序在本地化过程中经常发生变化,因此使用getFormatsByArgumentIndex()
方法通常会更好,该方法假定格式顺序与arguments
数组中传递给format
方法或返回结果数组的元素顺序相对应由parse
方法。 仅当数字用于参数名称时才支持此方法。 否则会引发IllegalArgumentException。
Returns | |
---|---|
Format[] |
the formats used for the format elements in the pattern |
Throws | |
---|---|
IllegalArgumentException |
if this format uses named arguments |
Format[] getFormatsByArgumentIndex ()
返回用于传递给format
方法或从parse
方法返回的值的Format对象。 返回数组中元素的索引与先前设置的模式字符串中使用的参数索引相对应。 返回数组中格式的顺序因此对应于传递给format
方法的arguments
数组中元素的顺序或format
方法返回的结果数组的parse
。
如果参数索引用于模式字符串中的多个格式元素,则用于最后一个这样的格式元素的格式将返回到数组中。 如果参数索引不用于模式字符串中的任何格式元素,则返回数组中的null。 仅当数字用于参数名称时才支持此方法。 否则会引发IllegalArgumentException。
Returns | |
---|---|
Format[] |
the formats used for the arguments within the pattern |
Throws | |
---|---|
IllegalArgumentException |
if this format uses named arguments |
Locale getLocale ()
返回创建或比较子格式时使用的语言环境。
Returns | |
---|---|
Locale |
the locale used when creating or comparing subformats |
ULocale getULocale ()
[icu]返回创建参数Format对象时使用的语言环境。
Returns | |
---|---|
ULocale |
the locale used when creating or comparing subformats |
int hashCode ()
返回对象的哈希码值。 为了散列表的好处而支持此方法,例如由HashMap
提供的HashMap
。
一般合同 hashCode
是:
hashCode
method must consistently return the same integer, provided no information used in equals
comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. equals(Object)
method, then calling the hashCode
method on each of the two objects must produce the same integer result. equals(java.lang.Object)
method, then calling the hashCode
method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables. 尽可能合理实用,类Object
定义的hashCode方法确实会为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java TM编程语言不需要此实现技术。)
Returns | |
---|---|
int |
a hash code value for this object. |
Object[] parse (String source)
从给定字符串的开头分析文本以生成对象数组。 该方法可能不会使用给定字符串的整个文本。
有关消息解析的更多信息,请参阅 parse(String, ParsePosition)
方法。
Parameters | |
---|---|
source |
String : A String whose beginning should be parsed. |
Returns | |
---|---|
Object[] |
An Object array parsed from the string. |
Throws | |
---|---|
ParseException |
if the beginning of the specified string cannot be parsed. |
IllegalArgumentException |
if this format uses named arguments |
Object[] parse (String source, ParsePosition pos)
分析字符串。
注意事项:在许多情况下,解析可能会失败。 例如:
Parameters | |
---|---|
source |
String
|
pos |
ParsePosition
|
Returns | |
---|---|
Object[] |
Throws | |
---|---|
IllegalArgumentException |
if this format uses named arguments |
Object parseObject (String source, ParsePosition pos)
分析字符串中的文本以生成对象数组或映射。
该方法尝试解析从pos
给出的索引开始的文本。 如果解析成功,则在使用最后一个字符(解析不一定使用到字符串末尾的所有字符)之后,将索引pos
更新为索引,并返回解析的对象数组。 已更新的pos
可用于指示下一次调用此方法的起点。 如果发生错误,则pos
的索引不会更改,将错误索引pos
设置为发生错误的字符的索引,并返回null。
有关消息解析的更多信息,请参阅 parse(String, ParsePosition)
方法。
Parameters | |
---|---|
source |
String : A String , part of which should be parsed. |
pos |
ParsePosition : A ParsePosition object with index and error index information as described above. |
Returns | |
---|---|
Object |
An Object parsed from the string, either an array of Object, or a Map, depending on whether named arguments are used. This can be queried using usesNamedArguments . In case of error, returns null. |
Throws | |
---|---|
NullPointerException |
if pos is null. |
Map<String, Object> parseToMap (String source)
[icu]解析给定字符串开始处的文本,以生成从参数到值的映射。 该方法可能不会使用给定字符串的整个文本。
有关消息解析的更多信息,请参阅 parse(String, ParsePosition)
方法。
Parameters | |
---|---|
source |
String : A String whose beginning should be parsed. |
Returns | |
---|---|
Map<String, Object> |
A Map parsed from the string. |
Throws | |
---|---|
ParseException |
if the beginning of the specified string cannot be parsed. |
Map<String, Object> parseToMap (String source, ParsePosition pos)
[icu]解析字符串,将结果返回到Map中。 这与返回Object数组的版本类似。 这支持命名和编号参数 - 如果编号,映射中的键是相应的ASCII十进制数字串(例如“0”,“1”,“2”...)。
Parameters | |
---|---|
source |
String : the text to parse |
pos |
ParsePosition : the position at which to start parsing. on return, contains the result of the parse. |
Returns | |
---|---|
Map<String, Object> |
a Map containing key/value pairs for each parsed argument. |
void setFormat (int formatElementIndex, Format newFormat)
将格式对象设置为在先前设置的模式字符串中用于具有给定格式元素索引的格式元素。 格式元素索引是从模式字符串开始计数的格式元素的从零开始的数字。
由于模式字符串中格式元素的顺序在本地化过程中经常发生变化,因此通常使用 setFormatByArgumentIndex
方法更好,该方法根据它们指定的参数索引访问格式元素。
Parameters | |
---|---|
formatElementIndex |
int : the index of a format element within the pattern |
newFormat |
Format : the format to use for the specified format element |
Throws | |
---|---|
ArrayIndexOutOfBoundsException |
if formatElementIndex is equal to or larger than the number of format elements in the pattern string |
void setFormatByArgumentIndex (int argumentIndex, Format newFormat)
设置Format对象以用于之前设置的模式字符串中使用给定参数索引的格式元素。 参数索引是格式元素定义的一部分,表示传递给format
方法的arguments
数组或由parse
方法返回的结果数组的parse
。
如果参数索引用于模式字符串中的多个格式元素,则新格式将用于所有此类格式元素。 如果参数索引不用于模式字符串中的任何格式元素,则新格式将被忽略。 仅当数字用于参数名称时才支持此方法。 否则会引发IllegalArgumentException。
Parameters | |
---|---|
argumentIndex |
int : the argument index for which to use the new format |
newFormat |
Format : the new format to use |
Throws | |
---|---|
IllegalArgumentException |
if this format uses named arguments |
void setFormatByArgumentName (String argumentName, Format newFormat)
[icu]将Format对象设置为用于先前设置的模式字符串中使用给定参数名称的格式元素。
如果参数名称用于模式字符串中的多个格式元素,则新格式将用于所有此类格式元素。 如果参数名称未用于模式字符串中的任何格式元素,则新格式将被忽略。
该API可用于不使用命名参数的格式。 在这种情况下, argumentName
应该是一个用于命名参数索引的字符串,例如“0”,“1”,“2”等。如果它没有命名有效索引,则格式将被忽略。 没有错误被抛出。
Parameters | |
---|---|
argumentName |
String : the name of the argument to change |
newFormat |
Format : the new format to use |
void setFormats (Format[] newFormats)
设置Format对象以用于先前设置的模式字符串中的格式元素。 格式在newFormats
中的顺序对应于模式字符串中的格式元素的顺序。
如果提供了比模式字符串所需格式更多的格式,则其余格式将被忽略。 如果提供的格式少于需要的格式,则只替换第一个newFormats.length
格式。
由于模式字符串中格式元素的顺序在本地化过程中经常发生变化,通常使用 setFormatsByArgumentIndex
方法会更好,该方法假定格式顺序与 arguments
数组中传递给 format
方法或结果数组的元素顺序相对应由 parse
方法返回。
Parameters | |
---|---|
newFormats |
Format : the new formats to use |
Throws | |
---|---|
NullPointerException |
if newFormats is null |
void setFormatsByArgumentIndex (Format[] newFormats)
设置Format对象以用于传入format
方法的值或从parse
方法返回的值。 newFormats
中元素的newFormats
对应于先前设置的模式字符串中使用的参数索引。 因此, newFormats
的格式顺序对应于传递给format
方法的arguments
数组中的元素顺序或format
方法返回的结果数组parse
。
如果参数索引用于模式字符串中的多个格式元素,则相应的新格式将用于所有此类格式元素。 如果参数索引不用于模式字符串中的任何格式元素,则忽略相应的新格式。 如果提供的格式少于需要的格式, newFormats.length
替换参数索引小于newFormats.length
的格式。 只有格式不使用命名参数时才支持此方法,否则会引发IllegalArgumentException。
Parameters | |
---|---|
newFormats |
Format : the new formats to use |
Throws | |
---|---|
NullPointerException |
if newFormats is null |
IllegalArgumentException |
if this formatter uses named arguments |
void setFormatsByArgumentName (Map<String, Format> newFormats)
[icu]将Format对象设置为用于传递给format
方法的值或从parse
方法返回的值。 newFormats
中的键是先前设置的模式字符串中的参数名称,值是格式。
只考虑来自模式字符串的参数名称。 newFormats
中与参数名称不对应的额外键将被忽略。 同样,如果参数名称的newFormat中没有格式,则该参数的格式化程序保持不变。
这可以在不使用命名参数的格式上调用。 在这种情况下,将查询表示参数索引的关键字符串的映射,例如“0”,“1”,“2”等。
Parameters | |
---|---|
newFormats |
Map : a map from String to Format providing new formats for named arguments. |
void setLocale (ULocale locale)
设置用于创建参数格式化对象的区域设置。 这会影响对applyPattern
方法以及format
和formatToCharacterIterator
方法的后续调用。
Parameters | |
---|---|
locale |
ULocale : the locale to be used when creating or comparing subformats |
void setLocale (Locale locale)
设置用于创建参数格式化对象的区域设置。 这会影响后续对applyPattern
方法以及format
和formatToCharacterIterator
方法的调用。
Parameters | |
---|---|
locale |
Locale : the locale to be used when creating or comparing subformats |
String toPattern ()
返回应用的模式字符串。
Returns | |
---|---|
String |
the pattern string |
Throws | |
---|---|
IllegalStateException |
after custom Format objects have been set via setFormat() or similar APIs |
boolean usesNamedArguments ()
[icu]如果此MessageFormat使用命名参数,则返回true,否则返回false。 见课程描述。
Returns | |
---|---|
boolean |
true if named arguments are used. |