Most visited

Recently visited

Added in API level 24

MessageFormat

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十进制数字串(不包含前导零)。

Patterns and Their Interpretation

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: see ChoiceFormat
 pluralStyle: see PluralFormat
 selectStyle: see SelectFormat

 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
 

建议:对于人类可读的文本使用真正的撇号(单引号)字符,并仅在程序语法中使用ASCII撇号(''),如在MessageFormat中引用。 请参阅Unicode标准中的U + 0027撇号注释。

choice参数类型已弃用。 使用plural参数进行适当的复数选择,并使用select参数在一组固定选项中进行简单选择。

argTypeargStyle值用于为格式元素创建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)
    .setDefaultRuleset(argStyleText);
ordinal argStyleText (optional) new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL)
    .setDefaultRuleset(argStyleText);
duration argStyleText (optional) new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION)
    .setDefaultRuleset(argStyleText);

Differences from java.text.MessageFormat

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根本不支持复数和选择参数。

Usage Information

以下是一些使用示例:

 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.

 
Typically, the message format will come from resources, and the arguments will be dynamically set at runtime.

例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.

Synchronization

MessageFormats不同步。 建议为每个线程创建单独的格式实例。 如果多个线程同时访问一个格式,它必须在外部同步。

也可以看看:

Summary

Nested classes

class MessageFormat.Field

定义从MessageFormat.formatToCharacterIterator返回的AttributedCharacterIterator中用作属性键的MessageFormat.formatToCharacterIterator

Public constructors

MessageFormat(String pattern)

构造默认的 FORMAT语言环境和指定模式的MessageFormat。

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)

格式化对象数组,并将 MessageFormat的模式(用参数替换格式对象)附加到提供的 StringBuffer

static String format(String pattern, Map<StringObject> arguments)

用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。

final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)

格式化地图或对象数组,并将 MessageFormat的模式(格式化元素替换为格式化对象) StringBuffer到提供的 StringBuffer

final StringBuffer format(Map<StringObject> arguments, StringBuffer result, FieldPosition pos)

格式地图上的对象并追加 MessageFormat的图案,与由经格式化的对象替换参数,所提供的 StringBuffer

static String format(String pattern, Object... arguments)

用给定的模式创建一个MessageFormat并使用它来格式化给定的参数。

AttributedCharacterIterator formatToCharacterIterator(Object arguments)

格式化一组对象并将它们插入到 MessageFormat的模式中,产生一个 AttributedCharacterIterator

MessagePattern.ApostropheMode getApostropheMode()

[ICU]

Set<String> getArgumentNames()

[icu]返回顶级参数名称。

Format getFormatByArgumentName(String argumentName)

[icu]返回与给定参数名称关联的第一个顶级格式。

Format[] getFormats()

返回用于先前设置的模式字符串中格式元素的Format对象。

Format[] getFormatsByArgumentIndex()

返回用于传递给 format方法或从 parse方法返回的值的Format对象。

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<StringObject> parseToMap(String source)

[icu]解析给定字符串开始处的文本,以生成从参数到值的映射。

Map<StringObject> 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对象以用于传递给 format方法的值或从 parse方法返回的值。

void setFormatsByArgumentName(Map<StringFormat> newFormats)

[icu]将Format对象设置为用于传递到 format方法的值或从 parse方法返回的值。

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

Public constructors

MessageFormat

Added in API level 24
MessageFormat (String pattern)

构造默认FORMAT区域设置和指定模式的MessageFormat。 设置语言环境并调用applyPattern(模式)。

Parameters
pattern String: the pattern for this message format
Throws
IllegalArgumentException if the pattern is invalid

也可以看看:

MessageFormat

Added in API level 24
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

Added in API level 24
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

Public methods

applyPattern

Added in API level 24
void applyPattern (String pttrn)

设置此消息格式使用的模式。 分析模式并为简单参数类型缓存Format对象。 模式及其解释在class description中指定。

Parameters
pttrn String: the pattern for this message format
Throws
IllegalArgumentException if the pattern is invalid

applyPattern

Added in API level 24
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

也可以看看:

autoQuoteApostrophe

Added in API level 24
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

clone

Added in API level 24
Object clone ()

创建并返回此对象的副本。

Returns
Object a clone of this instance.

equals

Added in API level 24
boolean equals (Object obj)

指示其他某个对象是否“等于”这一个。

equals方法在非空对象引用上实现等价关系:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values 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.
  • For any non-null reference value x, x.equals(null) should return false.

Objectequals方法实现了对象上最可能的等价关系; 也就是说,对于任何非空参考值xy ,当且仅当xy指向同一对象( 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.

format

Added in API level 24
StringBuffer format (Object[] arguments, 
                StringBuffer result, 
                FieldPosition pos)

格式化对象数组,并将 MessageFormat的模式(其参数替换为格式化对象)附加到提供的 StringBuffer

替换各个格式元素的文本是从格式元素的当前子格式和格式元素的参数索引处的arguments元素派生的,如下表的第一个匹配行所示。 如果argumentsnull或少于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

format

Added in API level 24
String format (String pattern, 
                Map<StringObject> 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.

也可以看看:

format

Added in API level 24
StringBuffer format (Object arguments, 
                StringBuffer result, 
                FieldPosition pos)

格式化地图或对象数组,并将MessageFormat的模式(格式化元素替换为格式化对象) StringBuffer到提供的StringBuffer 这相当于任一个

format((Object[]) arguments, result, pos) format((Map) arguments, result, pos)
A map must be provided if this format uses named arguments, otherwise an IllegalArgumentException will be thrown.

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

format

Added in API level 24
StringBuffer format (Map<StringObject> arguments, 
                StringBuffer result, 
                FieldPosition pos)

格式化对象的映射并将 MessageFormat的模式附加到提供的 StringBuffer ,并将格式化对象替换为参数。

替换单个格式元素的文本是从格式元素的当前子格式导出的,并且 arguments值将对应于格式元素的参数名称。

编号模式参数与包含该数字的映射键匹配为ASCII十进制数字串(不包含前导零)。

如果argumentsnull或者模式中没有与参数名称对应的值,则参数不可用 当参数不可用时,不执行替换。

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.

format

Added in API level 24
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

formatToCharacterIterator

Added in API level 24
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.

getApostropheMode

Added in API level 24
MessagePattern.ApostropheMode getApostropheMode ()

[ICU]

Returns
MessagePattern.ApostropheMode this instance's ApostropheMode.

getArgumentNames

Added in API level 24
Set<String> getArgumentNames ()

[icu]返回顶级参数名称。 有关更多详细信息,请参阅setFormatByArgumentName(String, Format)

Returns
Set<String> a Set of argument names

getFormatByArgumentName

Added in API level 24
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.

getFormats

Added in API level 24
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

getFormatsByArgumentIndex

Added in API level 24
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

getLocale

Added in API level 24
Locale getLocale ()

返回创建或比较子格式时使用的语言环境。

Returns
Locale the locale used when creating or comparing subformats

getULocale

Added in API level 24
ULocale getULocale ()

[icu]返回创建参数Format对象时使用的语言环境。

Returns
ULocale the locale used when creating or comparing subformats

hashCode

Added in API level 24
int hashCode ()

返回对象的哈希码值。 为了散列表的好处而支持此方法,例如由HashMap提供的HashMap

一般合同 hashCode是:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the 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.
  • If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the 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.

parse

Added in API level 24
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

parse

Added in API level 24
Object[] parse (String source, 
                ParsePosition pos)

分析字符串。

注意事项:在许多情况下,解析可能会失败。 例如:

  • If one of the arguments does not occur in the pattern.
  • If the format of an argument loses information, such as with a choice format where a large number formats to "many".
  • Does not yet handle recursion (where the substituted strings contain {n} references.)
  • Will not always find a match (or the correct match) if some part of the parse is ambiguous. For example, if the pattern "{1},{2}" is used with the string arguments {"a,b", "c"}, it will format as "a,b,c". When the result is parsed, it will return {"a", "b,c"}.
  • If a single argument is parsed more than once in the string, then the later parse wins.
When the parse fails, use ParsePosition.getErrorIndex() to find out where in the string did the parsing failed. The returned error index is the starting offset of the sub-patterns that the string is comparing with. For example, if the parsing string "AAA {0} BBB" is comparing against the pattern "AAD {0} BBB", the error index is 0. When an error occurs, the call to this method will return null. If the source is null, return an empty array.

Parameters
source String
pos ParsePosition
Returns
Object[]
Throws
IllegalArgumentException if this format uses named arguments

parseObject

Added in API level 24
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.

parseToMap

Added in API level 24
Map<StringObject> parseToMap (String source)

[icu]解析给定字符串开始处的文本,以生成从参数到值的映射。 该方法可能不会使用给定字符串的整个文本。

有关消息解析的更多信息,请参阅 parse(String, ParsePosition)方法。

Parameters
source String: A String whose beginning should be parsed.
Returns
Map<StringObject> A Map parsed from the string.
Throws
ParseException if the beginning of the specified string cannot be parsed.

也可以看看:

parseToMap

Added in API level 24
Map<StringObject> 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<StringObject> a Map containing key/value pairs for each parsed argument.

setFormat

Added in API level 24
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

setFormatByArgumentIndex

Added in API level 24
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

setFormatByArgumentName

Added in API level 24
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

setFormats

Added in API level 24
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

setFormatsByArgumentIndex

Added in API level 24
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

setFormatsByArgumentName

Added in API level 24
void setFormatsByArgumentName (Map<StringFormat> 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.

setLocale

Added in API level 24
void setLocale (ULocale locale)

设置用于创建参数格式化对象的区域设置。 这会影响对applyPattern方法以及formatformatToCharacterIterator方法的后续调用。

Parameters
locale ULocale: the locale to be used when creating or comparing subformats

setLocale

Added in API level 24
void setLocale (Locale locale)

设置用于创建参数格式化对象的区域设置。 这会影响后续对applyPattern方法以及formatformatToCharacterIterator方法的调用。

Parameters
locale Locale: the locale to be used when creating or comparing subformats

toPattern

Added in API level 24
String toPattern ()

返回应用的模式字符串。

Returns
String the pattern string
Throws
IllegalStateException after custom Format objects have been set via setFormat() or similar APIs

usesNamedArguments

Added in API level 24
boolean usesNamedArguments ()

[icu]如果此MessageFormat使用命名参数,则返回true,否则返回false。 见课程描述。

Returns
boolean true if named arguments are used.

Hooray!