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)+
ARG_START.CHOICE
stands for an ARG_START Part with ArgType CHOICE. 该类不适用于公共子类。
Nested classes |
|
---|---|
枚举 |
MessagePattern.ApostropheMode 当撇号开始引用MessageFormat输出的文字文本时的模式。 |
枚举 |
MessagePattern.ArgType 参数类型常量。 |
class |
MessagePattern.Part 消息模式“部分”,表示模式解析事件。 |
Constants |
|
---|---|
int |
ARG_NAME_NOT_NUMBER 当字符串是一个有效的“模式标识符”而不是数字时,从 |
int |
ARG_NAME_NOT_VALID 当字符串无效时从 |
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
|
int ARG_NAME_NOT_NUMBER
当字符串是有效的“模式标识符”而不是数字时,从 validateArgumentName(String)
返回值。
常量值:-1(0xffffffff)
int ARG_NAME_NOT_VALID
当字符串无效时,从validateArgumentName(String)
返回值。 它可能不是一个有效的“模式标识符”,或者它只有ASCII数字,但有一个前导零或数字太大。
常量值:-2(0xfffffffe)
double NO_NUMERIC_VALUE
当零件没有定义数值时,由getNumericValue(Part)返回的特殊值。
常量值:-1.23456789E8
MessagePattern (MessagePattern.ApostropheMode mode)
构造一个空的MessagePattern。
Parameters | |
---|---|
mode |
MessagePattern.ApostropheMode : Explicit ApostropheMode. |
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 |
String autoQuoteApostropheDeep ()
如果尚未将每个ASCII撇号加倍(转义),并且未将其解释为引用语法,则返回已解析模式字符串的版本。
例如,这会变成“我不'知道''{性别,选择,女性{h''er} other {h'im}}”。 变成“我不'知道''{性别,选择,女性{h''er}其他{h''im}}”。
Returns | |
---|---|
String |
the deep-auto-quoted version of the parsed pattern string. |
也可以看看:
void clearPatternAndSetApostropheMode (MessagePattern.ApostropheMode mode)
清除此MessagePattern并设置撇号模式。 countParts()将返回0。
Parameters | |
---|---|
mode |
MessagePattern.ApostropheMode : The new ApostropheMode. |
Object clone ()
创建并返回此对象的副本。
Returns | |
---|---|
Object |
a copy of this object (or itself if frozen). |
MessagePattern cloneAsThawed ()
创建并返回此对象的解冻副本。
Returns | |
---|---|
MessagePattern |
a copy of this object. |
int countParts ()
返回通过解析模式字符串创建的“部分”的数量。 如果未分析模式或调用clear(),则返回0。
Returns | |
---|---|
int |
the number of pattern parts. |
boolean equals (Object other)
指示其他某个对象是否“等于”这一个。
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
. 类equals
方法Object
实现了对象上最可能的等价关系; 即对于任何非空参考值x
和y
,当且仅当x
和y
引用同一对象( 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. |
MessagePattern freeze ()
冻结这个对象,使它不可变且线程安全。
Returns | |
---|---|
MessagePattern |
this |
MessagePattern.ApostropheMode getApostropheMode ()
Returns | |
---|---|
MessagePattern.ApostropheMode |
this instance's ApostropheMode. |
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 |
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. |
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 |
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 |
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 |
String getPatternString ()
Returns | |
---|---|
String |
the parsed pattern string (null if none was parsed). |
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 |
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. |
boolean hasNamedArguments ()
解析的模式是否具有像{first_name}这样的命名参数?
Returns | |
---|---|
boolean |
true if the parsed pattern has at least one named argument. |
boolean hasNumberedArguments ()
解析的模式是否有像{2}这样的编号参数?
Returns | |
---|---|
boolean |
true if the parsed pattern has at least one numbered argument. |
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. |
boolean isFrozen ()
确定此对象是否被冻结(不可变)。
Returns | |
---|---|
boolean |
true if this object is frozen. |
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 |
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 |
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 |
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 |
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). |
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法返回一个“文本表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |
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. |