Most visited

Recently visited

Added in API level 24

MessagePattern

public final class MessagePattern
extends Object implements Cloneable, Freezable<MessagePattern>

java.lang.Object
   ↳ android.icu.text.MessagePattern


分析并表示ICU MessageFormat模式。 还处理ChoiceFormat,PluralFormat和SelectFormat的模式。 用于这些类的实现以及用于消息验证,转换和格式转换的工具。

解析器处理与识别消息参数相关的所有语法。 这包括“复杂”参数,其样式字符串包含嵌套的MessageFormat模式子字符串。 对于“简单”参数(没有嵌套的MessageFormat模式子字符串),参数样式不会被进一步解析。

解析器处理命名和编号的消息参数,并允许在一个消息中。

模式成功解析后,使用countParts(),getPart()和相关方法遍历解析的数据。

数据在逻辑上表示一个分析树,但作为“零件”列表进行存储和访问,以便进行快速简单的分析并尽量减少对象分配。 参数和嵌套消息最好通过递归处理。 对于每个_START“部分”, getLimitPartIndex(int)有效地返回相应的_LIMIT“部分”的索引。

“零件”清单:

 message = MSG_START (SKIP_SYNTAX | INSERT_CHAR | REPLACE_NUMBER | argument)* MSG_LIMIT
 argument = noneArg | simpleArg | complexArg
 complexArg = choiceArg | pluralArg | selectArg

 noneArg = ARG_START.NONE (ARG_NAME | ARG_NUMBER) ARG_LIMIT.NONE
 simpleArg = ARG_START.SIMPLE (ARG_NAME | ARG_NUMBER) ARG_TYPE [ARG_STYLE] ARG_LIMIT.SIMPLE
 choiceArg = ARG_START.CHOICE (ARG_NAME | ARG_NUMBER) choiceStyle ARG_LIMIT.CHOICE
 pluralArg = ARG_START.PLURAL (ARG_NAME | ARG_NUMBER) pluralStyle ARG_LIMIT.PLURAL
 selectArg = ARG_START.SELECT (ARG_NAME | ARG_NUMBER) selectStyle ARG_LIMIT.SELECT

 choiceStyle = ((ARG_INT | ARG_DOUBLE) ARG_SELECTOR message)+
 pluralStyle = [ARG_INT | ARG_DOUBLE] (ARG_SELECTOR [ARG_INT | ARG_DOUBLE] message)+
 selectStyle = (ARG_SELECTOR message)+
 

该类不适用于公共子类。

Summary

Nested classes

枚举 MessagePattern.ApostropheMode

当撇号开始引用MessageFormat输出的文字文本时的模式。

枚举 MessagePattern.ArgType

参数类型常量。

class MessagePattern.Part

消息模式“部分”,表示模式解析事件。

Constants

int ARG_NAME_NOT_NUMBER

当字符串是一个有效的“模式标识符”而不是数字时,从 validateArgumentName(String)返回值。

int ARG_NAME_NOT_VALID

当字符串无效时从 validateArgumentName(String)返回值。

double NO_NUMERIC_VALUE

当零件没有定义数值时,由getNumericValue(Part)返回的特殊值。

Public constructors

MessagePattern()

使用默认的ApostropheMode构造一个空的MessagePattern。

MessagePattern(MessagePattern.ApostropheMode mode)

构造一个空的MessagePattern。

MessagePattern(String pattern)

使用默认的ApostropheMode构造MessagePattern并分析MessageFormat模式字符串。

Public methods

String autoQuoteApostropheDeep()

如果尚未将每个ASCII撇号加倍(转义),并且未将其解释为引用语法,则返回已解析模式字符串的版本。

void clear()

清除此MessagePattern。

void clearPatternAndSetApostropheMode(MessagePattern.ApostropheMode mode)

清除此MessagePattern并设置撇号模式。

Object clone()

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

MessagePattern cloneAsThawed()

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

int countParts()

返回通过解析模式字符串创建的“部分”的数量。

boolean equals(Object other)

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

MessagePattern freeze()

冻结这个对象,使它不可变且线程安全。

MessagePattern.ApostropheMode getApostropheMode()
int getLimitPartIndex(int start)

返回开始时对应于ARG | MSG_START的ARG | MSG_LIMIT部分的索引。

double getNumericValue(MessagePattern.Part part)

返回与ARG_INT或ARG_DOUBLE关联的数值。

MessagePattern.Part getPart(int i)

获取第i个模式的“部分”。

MessagePattern.Part.Type getPartType(int i)

返回第i个模式“part”的Part.Type。

int getPatternIndex(int partIndex)

返回指定模式“part”的模式索引。

String getPatternString()
double getPluralOffset(int pluralStart)

返回PluralFormat参数的“offset:”值,如果没有指定任何值,则返回0。

String getSubstring(MessagePattern.Part part)

返回由零件指示的模式字符串的子字符串。

boolean hasNamedArguments()

解析的模式是否具有像{first_name}这样的命名参数?

boolean hasNumberedArguments()

解析的模式是否有像{2}这样的编号参数?

int hashCode()

返回对象的哈希码值。

boolean isFrozen()

确定此对象是否被冻结(不可变)。

MessagePattern parse(String pattern)

分析MessageFormat模式字符串。

MessagePattern parseChoiceStyle(String pattern)

分析ChoiceFormat模式字符串。

MessagePattern parsePluralStyle(String pattern)

分析PluralFormat模式字符串。

MessagePattern parseSelectStyle(String pattern)

分析一个SelectFormat模式字符串。

boolean partSubstringMatches(MessagePattern.Part part, String s)

将零件的子字符串与输入字符串s进行比较。

String toString()

返回对象的字符串表示形式。

static int validateArgumentName(String name)

验证并解析参数名称或参数号字符串。

Inherited methods

From class java.lang.Object
From interface android.icu.util.Freezable

Constants

ARG_NAME_NOT_NUMBER

Added in API level 24
int ARG_NAME_NOT_NUMBER

当字符串是有效的“模式标识符”而不是数字时,从 validateArgumentName(String)返回值。

常量值:-1(0xffffffff)

ARG_NAME_NOT_VALID

Added in API level 24
int ARG_NAME_NOT_VALID

当字符串无效时,从validateArgumentName(String)返回值。 它可能不是一个有效的“模式标识符”,或者它只有ASCII数字,但有一个前导零或数字太大。

常量值:-2(0xfffffffe)

NO_NUMERIC_VALUE

Added in API level 24
double NO_NUMERIC_VALUE

当零件没有定义数值时,由getNumericValue(Part)返回的特殊值。

也可以看看:

常量值:-1.23456789E8

Public constructors

MessagePattern

Added in API level 24
MessagePattern ()

使用默认的ApostropheMode构造一个空的MessagePattern。

MessagePattern

Added in API level 24
MessagePattern (MessagePattern.ApostropheMode mode)

构造一个空的MessagePattern。

Parameters
mode MessagePattern.ApostropheMode: Explicit ApostropheMode.

MessagePattern

Added in API level 24
MessagePattern (String pattern)

使用默认的ApostropheMode构造MessagePattern并分析MessageFormat模式字符串。

Parameters
pattern String: a MessageFormat pattern string
Throws
IllegalArgumentException for syntax errors in the pattern string
IndexOutOfBoundsException if certain limits are exceeded (e.g., argument number too high, argument name too long, etc.)
NumberFormatException if a number could not be parsed

Public methods

autoQuoteApostropheDeep

Added in API level 24
String autoQuoteApostropheDeep ()

如果尚未将每个ASCII撇号加倍(转义),并且未将其解释为引用语法,则返回已解析模式字符串的版本。

例如,这会变成“我不'知道''{性别,选择,女性{h''er} other {h'im}}”。 变成“我不'知道''{性别,选择,女性{h''er}其他{h''im}}”。

Returns
String the deep-auto-quoted version of the parsed pattern string.

也可以看看:

clear

Added in API level 24
void clear ()

清除此MessagePattern。 countParts()将返回0。

clearPatternAndSetApostropheMode

Added in API level 24
void clearPatternAndSetApostropheMode (MessagePattern.ApostropheMode mode)

清除此MessagePattern并设置撇号模式。 countParts()将返回0。

Parameters
mode MessagePattern.ApostropheMode: The new ApostropheMode.

clone

Added in API level 24
Object clone ()

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

Returns
Object a copy of this object (or itself if frozen).

cloneAsThawed

Added in API level 24
MessagePattern cloneAsThawed ()

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

Returns
MessagePattern a copy of this object.

countParts

Added in API level 24
int countParts ()

返回通过解析模式字符串创建的“部分”的数量。 如果未分析模式或调用clear(),则返回0。

Returns
int the number of pattern parts.

equals

Added in API level 24
boolean equals (Object other)

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

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.

equals方法Object实现了对象上最可能的等价关系; 即对于任何非空参考值xy ,当且仅当xy引用同一对象( x == y的值为true )时,此方法返回true

请注意,无论何时覆盖此方法,通常都需要覆盖 hashCode方法,以便维护 hashCode方法的一般合同,该方法声明相等对象必须具有相同的散列代码。

Parameters
other Object: another object to compare with.
Returns
boolean true if this object is equivalent to the other one.

freeze

Added in API level 24
MessagePattern freeze ()

冻结这个对象,使它不可变且线程安全。

Returns
MessagePattern this

getApostropheMode

Added in API level 24
MessagePattern.ApostropheMode getApostropheMode ()

Returns
MessagePattern.ApostropheMode this instance's ApostropheMode.

getLimitPartIndex

Added in API level 24
int getLimitPartIndex (int start)

返回开始时对应于ARG | MSG_START的ARG | MSG_LIMIT部分的索引。

Parameters
start int: The index of some Part data (0..countParts()-1); this Part should be of Type ARG_START or MSG_START.
Returns
int The first i>start where getPart(i).getType()==ARG|MSG_LIMIT at the same nesting level, or start itself if getPartType(msgStart)!=ARG|MSG_START.
Throws
IndexOutOfBoundsException if start is outside the (0..countParts()-1) range

getNumericValue

Added in API level 24
double getNumericValue (MessagePattern.Part part)

返回与ARG_INT或ARG_DOUBLE关联的数值。

Parameters
part MessagePattern.Part: a part of this MessagePattern.
Returns
double the part's numeric value, or NO_NUMERIC_VALUE if this is not a numeric part.

getPart

Added in API level 24
MessagePattern.Part getPart (int i)

获取第i个模式的“部分”。

Parameters
i int: The index of the Part data. (0..countParts()-1)
Returns
MessagePattern.Part the i-th pattern "part".
Throws
IndexOutOfBoundsException if i is outside the (0..countParts()-1) range

getPartType

Added in API level 24
MessagePattern.Part.Type getPartType (int i)

返回第i个模式“part”的Part.Type。 getPart(i).getType()的便捷方法。

Parameters
i int: The index of the Part data. (0..countParts()-1)
Returns
MessagePattern.Part.Type The Part.Type of the i-th Part.
Throws
IndexOutOfBoundsException if i is outside the (0..countParts()-1) range

getPatternIndex

Added in API level 24
int getPatternIndex (int partIndex)

返回指定模式“part”的模式索引。 getPart(partIndex).getIndex()的便捷方法。

Parameters
partIndex int: The index of the Part data. (0..countParts()-1)
Returns
int The pattern index of this Part.
Throws
IndexOutOfBoundsException if partIndex is outside the (0..countParts()-1) range

getPatternString

Added in API level 24
String getPatternString ()

Returns
String the parsed pattern string (null if none was parsed).

getPluralOffset

Added in API level 24
double getPluralOffset (int pluralStart)

返回PluralFormat参数的“offset:”值,如果没有指定任何值,则返回0。

Parameters
pluralStart int: the index of the first PluralFormat argument style part. (0..countParts()-1)
Returns
double the "offset:" value.
Throws
IndexOutOfBoundsException if pluralStart is outside the (0..countParts()-1) range

getSubstring

Added in API level 24
String getSubstring (MessagePattern.Part part)

返回由零件指示的模式字符串的子字符串。 getPatternString()。substring(part.getIndex(),part.getLimit())的便捷方法。

Parameters
part MessagePattern.Part: a part of this MessagePattern.
Returns
String the substring associated with part.

hasNamedArguments

Added in API level 24
boolean hasNamedArguments ()

解析的模式是否具有像{first_name}这样的命名参数?

Returns
boolean true if the parsed pattern has at least one named argument.

hasNumberedArguments

Added in API level 24
boolean hasNumberedArguments ()

解析的模式是否有像{2}这样的编号参数?

Returns
boolean true if the parsed pattern has at least one numbered argument.

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.

isFrozen

Added in API level 24
boolean isFrozen ()

确定此对象是否被冻结(不可变)。

Returns
boolean true if this object is frozen.

parse

Added in API level 24
MessagePattern parse (String pattern)

分析MessageFormat模式字符串。

Parameters
pattern String: a MessageFormat pattern string
Returns
MessagePattern this
Throws
IllegalArgumentException for syntax errors in the pattern string
IndexOutOfBoundsException if certain limits are exceeded (e.g., argument number too high, argument name too long, etc.)
NumberFormatException if a number could not be parsed

parseChoiceStyle

Added in API level 24
MessagePattern parseChoiceStyle (String pattern)

分析ChoiceFormat模式字符串。

Parameters
pattern String: a ChoiceFormat pattern string
Returns
MessagePattern this
Throws
IllegalArgumentException for syntax errors in the pattern string
IndexOutOfBoundsException if certain limits are exceeded (e.g., argument number too high, argument name too long, etc.)
NumberFormatException if a number could not be parsed

parsePluralStyle

Added in API level 24
MessagePattern parsePluralStyle (String pattern)

分析PluralFormat模式字符串。

Parameters
pattern String: a PluralFormat pattern string
Returns
MessagePattern this
Throws
IllegalArgumentException for syntax errors in the pattern string
IndexOutOfBoundsException if certain limits are exceeded (e.g., argument number too high, argument name too long, etc.)
NumberFormatException if a number could not be parsed

parseSelectStyle

Added in API level 24
MessagePattern parseSelectStyle (String pattern)

分析一个SelectFormat模式字符串。

Parameters
pattern String: a SelectFormat pattern string
Returns
MessagePattern this
Throws
IllegalArgumentException for syntax errors in the pattern string
IndexOutOfBoundsException if certain limits are exceeded (e.g., argument number too high, argument name too long, etc.)
NumberFormatException if a number could not be parsed

partSubstringMatches

Added in API level 24
boolean partSubstringMatches (MessagePattern.Part part, 
                String s)

将零件的子字符串与输入字符串s进行比较。

Parameters
part MessagePattern.Part: a part of this MessagePattern.
s String: a string.
Returns
boolean true if getSubstring(part).equals(s).

toString

Added in API level 24
String toString ()

返回对象的字符串表示形式。 一般来说, toString方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。

ObjecttoString方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @ ”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Returns
String a string representation of the object.

validateArgumentName

Added in API level 24
int validateArgumentName (String name)

验证并解析参数名称或参数号字符串。 参数名称必须是“模式标识符”,也就是说,它不能包含Unicode Pattern_Syntax或Pattern_White_Space字符。 如果它只包含ASCII数字,那么它必须是一个没有前导零的小整数。

Parameters
name String: Input string.
Returns
int >=0 if the name is a valid number, ARG_NAME_NOT_NUMBER (-1) if it is a "pattern identifier" but not all ASCII digits, ARG_NAME_NOT_VALID (-2) if it is neither.

Hooray!