首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在没有Android ICU的ChoiceFormat中使用"{0,ordinal}“

在没有Android ICU的ChoiceFormat中使用"{0,ordinal}",可以通过以下步骤实现:

  1. 导入相关的Java类库:在代码中导入java.text.MessageFormat类库。
  2. 创建MessageFormat对象:使用MessageFormat类的静态方法format()创建一个MessageFormat对象,并传入需要格式化的字符串作为参数。
  3. 设置格式化模式:通过调用MessageFormat对象的setFormatByArgumentIndex()方法,设置格式化模式为"{0,ordinal}"。其中,"{0}"表示需要格式化的参数的索引,"ordinal"表示使用序数形式进行格式化。
  4. 格式化字符串:使用MessageFormat对象的format()方法,传入需要格式化的参数值作为参数,即可得到格式化后的字符串。

以下是一个示例代码:

代码语言:java
复制
import java.text.MessageFormat;

public class Main {
    public static void main(String[] args) {
        String pattern = "The {0,ordinal} item";
        MessageFormat messageFormat = new MessageFormat(pattern);
        messageFormat.setFormatByArgumentIndex(0, new ChoiceFormat("1=st|2=nd|3=rd|4=th"));
        
        int itemNumber = 1;
        String formattedString = messageFormat.format(new Object[]{itemNumber});
        System.out.println(formattedString);
    }
}

输出结果为:"The 1st item"。

在这个例子中,我们使用了MessageFormat类来格式化字符串,通过setFormatByArgumentIndex()方法设置了格式化模式为"{0,ordinal}",然后通过format()方法传入需要格式化的参数值,即可得到格式化后的字符串。在格式化模式中,我们使用了ChoiceFormat来实现序数的格式化,其中"1=st|2=nd|3=rd|4=th"表示了1、2、3、4分别对应的序数形式。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android P 行为变更

更新 ICU 库 平台使用 ICU 库已更新至 ICU 58 版本;Android 8.0 (API 版本 26) 和8.1 (API 等级 27) 使用 ICU 库则更新至 ICU 60 版本...此版本 ICU 包括一系列小而实用更改项, Emoji 5.0 数据支持、日期 / 时间格式优化 (详情可阅读 ICU 59 和 ICU 60 发布说明)。...您可前往 “Android Developers 官方文档” 阅览 “ Legacy 测试库 ” 页面,查看如何在 Android P 中使用测试库。...Android P UTF-8 解码器更为严格,同时遵循 Unicode 标准,即: 非最短形式编码 UTF-8, ,现在属于不规范编码; 代理形式编码 UTF-8,...*注意:FLAG_ACTIVITY_NEW_TASK 标签要求属为预期行为,并且从 Android N 就对此作了强制要求。但是 Android N 系统错误暂时导致此要求没有被强制执行。

2.6K20

Java魔法堂:初探MessageFormat.format和ChoiceFormat

FormatType ,指定使用不同Format子类对入参进行格式化处理。...模式占位符: 0 ,代表该为位为数字,若不存在则用0填充 # ,代表该为位为数字 , ,代表分隔符, 模式为 #,# ,那么格式化10时会返回1,0    2...ChoiceFormat     相当于以数字为键,字符串为值键值对。分别使用一组double类型数组作为键,一组String类型数组作为值,两数组相同索引值元素作为一对。    .../* 输出 * hello0 * hello1 * hello0 * hello3 */    注意:当找不到对应键值对时,则使用第一或最后一对键值对。    ...示例——结合MessageFormat使用 double[] limit = {0, 1}; String[] format = {"Hello0", "Hello1{1}"}; ChoiceFormat

86180
  • dotnet 使用 ToUpperInvariant 替换 ToUpper 以避免初始化 icu 过慢

    在应用软件启动过程,客户端应用软件是对性能敏感。比如在解析命令行参数时候,有时候需要进行字符串处理逻辑。...一般来说命令行参数都是语言文化无关,在需要进行全大写或全小写转换过程,采用 ToUpperInvariant 替换 ToUpper 方法可以避免初始化 icu 模块,减少 icu 模块初始化过慢影响启动性能...,如以下代码 chars[0] = char.ToUpper(chars[0], CultureInfo.InvariantCulture); 以上代码将会导致在启动过程初始化 ICU 模块,而 ICU...,可以看到基本命令行解析所有时间都用在了 ICU 初始化上,这是不合理 优化方法是换成 ToUpperInvariant 从而规避 ICU 初始化,如以下代码 chars[0] = char.ToUpperInvariant...(chars[0]); 为什么这两个方法调用会有 ICU差异?

    19910

    libxml2剖析(2):编译

    ICU实现了对数字、日期、货币等设置国际化支持,提供了强大BIDI算法,对阿拉伯语和希伯来语等BiDi语言提供了完善支持。ICU分为ICU4J和ICU4C,分别对应Java和C/C++平台。...这个库是在一种无限制开放源码许可证下发布,这使它可以用在各种商业程序、开源程序。详细可参考官网http://site.icu-project.org/。      ...ICU库比较大,binary就有几十MB以上。一般使用libiconv就足够了,这也是libxml2缺省使用编码转换库。在编译libxml2时缺省是会链接到iconv库,我们上面选择是不链接。...使用这个声明可以省掉在DEF文件手工定义导出哪些函数工作。...本变量标记这样特殊情况。Linux, Windows上本变量值为0。     7)@HAVE_WCHAR_T@: 是否使用宽字符处理。若上面使用了宽字符处理,本变量值为1。

    2.1K20

    java 枚举(enum) 全面解读

    Enum类接受一个继承自Enum泛型.(在反编译java文件没有体现泛型是因为,泛型在阶段就会被类型类型擦除,替换为具体实现.)....- other.ordinal; } ordinal: 表示枚举顺序,从Color类可以看出,它是从0开始按自然数顺序增长,且其值是final类型,外部无法更改.对于 ordinal()方法...它实现比其他方式需要更多内存空间,所以在Android这种受资源约束设备尽量避免使用枚举单例,而选择 双重检查锁(DCL)和静态内部类方式实现单例....你应该严格避免在Android使用枚举. 导致很多开发者把它当成了教条,禁止在Android使用枚举....因此,不建议在Android使用枚举常量,而更偏向于使用 static final来定义常量. 但是,枚举常量中有类型安全检查功能,使用常规实现,没有这种功能.

    89510

    Android 新特性_Android10使用

    实际测试虽然没有Google官方说那般优秀,但依旧对续航起到了一定改善作用。Doze休眠机制是当设备处于空闲状态时,通过推迟应用 CPU 和网络活动以实现省电目的系统模式。...设备系统和应用使用 RAM。...3.4 作用域目录访问 在Android N ,应用可以使用 API 请求访问特定外部存储目录,包括可移动媒体上目录, SD 卡。...但由于Android N内置了部分ICU4J API,如果Android应用只使用了这部分API,那今后就可以不再集成庞大高达10MB左右ICU4J库了。...开发者可以在Google Play上针对使用Android N用户提供不含ICU4J轻量安装包,而针对更早版本系统提供包含ICU4J完整安装包。 4.

    1.2K20

    Kotlin Vocabulary | 枚举和 R8 编译器

    这方面的问题在 Kotlin 显得更加有趣,因为 Kotlin 最终会编译为 Java 字节码,但是它却提供了 Java 所没有的功能。那么 Kotlin 是怎么做到呢?这些功能有没有额外开销?...D8 D8 是整个链条第二个编译器,它把 Java 字节码转换为 DEX 代码。到了这一步,您已经有了能够运行在 Android 代码。不过,您也可以选择继续使用第三个编译器 —— R8。...使用 Kotlin 时,也仅仅是将其转换为 Java 编程语言中枚举而已,并没有多大开销。(我们曾经提到避免使用枚举,但那是很多年前事了,而且运行时也与今日不同。所以现在使用枚举没什么问题。)...} // ... } } 这段代码没有对枚举直接使用 switch 语句,而是调用了一个数组。...$0[BlendMode.FADE.ordinal()] = 3; $EnumSwitchMapping$0[BlendMode.ADD.ordinal()] = 4; } }

    1K50

    JDK枚举底层实现

    前提 上一篇文章复习介绍了JDK中注解底层实现,跟注解一样比较常用,但是底层实现比较神秘还有枚举类型。趁着国庆假期最后两天,把JDK枚举底层实现也进行一次探究。...JDK枚举描述 国际惯例,先看一下JavaSE-8语言规范JLS-8.9对枚举类型定义和描述: ?...枚举类型不能使用abstract或者final修饰,否则会产生编译错误。 枚举类型直接超类是java.lang.Enum。 枚举类型除了枚举常量定义之外没有其他实例,也就是枚举类型不能实例化。...枚举类型禁用反射操作进行实例化(这个特性就是Effetive Java推荐使用枚举实现单例原因)。...小结 JDK枚举底层实现就是使用了enum关键字声明枚举类编译后最终会变成public final修饰同时实现了继承了泛型抽象类java.lang.Enum并且指定泛型参数为自身普通Java类,

    86220

    【小家Spring】聊聊Spring格式化:Formatter、AnnotationFormatterFactory、DateFormatter以及@DateTimeFormat...

    是一个FormatterRegistrar new DateTimeFormatterRegistrar().registerFormatters(formatterRegistry); // 没有导入...@Bean,还没有一个很好用于之地 在基于xml配置,这么做:我们就可以自定义一个名字为...ChoiceFormat允许将格式化运用到某个范围数,通常与MessageFormat一同使用。...nextDouble(double d)静态方法查找大于d最小double值,用在limits数组,从而使limits数组形成一个右开区间数组,例如:limits = {0,1,ChoiceFormat.nextDouble...数组按照索引0值,即输出"星期一" } ChoiceFormat构造方法也允许我们传入一个模式字符串,format方法会根据这个模式字符串执行格式化操作:doubleNum [占位符]

    3.8K31

    深度了解Android 7.0 ,你准备好了吗?

    ● 自定义视图:两个新 API ,在通知中使用自定义视图时可以充分利用系统装饰元素,通知标题和操作。...Vulkan是完全从零开始设计,以最小化驱动器 CPU 开销,并能让应用更直接地控制 GPU 操作。Vulkan还允许多个线程同时执行工作,命令缓冲区构建,以获得更好并行化。...十三、Android ICU4J API ICU4J 是一个广泛使用开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。...Android N 在android.icu软件包下显示 Android 框架 ICU4J API 子集,供应用开发者使用。...如果已在应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供android.icu API 可以大量节省 APK 大小。

    2.8K10

    走进 JDK 之 Enum

    说实话,在我这些年开发生涯,用过枚举次数大概两只手都可以数过来。当然你不能说枚举一无是处,只能说是我对 Java 理解还不够深刻,在可以使用枚举时候并没有使用。...字段 private final String name; // 枚举实例名称,就是枚举声明名称 private final int ordinal; // 在枚举声明次序,从 0 开始 枚举类就只有这两个字段...ordinal 就是声明次序,之所以在 switch 可以使用枚举,就是因为编译器会自动调用枚举 ordinal() 方法。...找遍了 Enum.java 也没有看到这个方法,既然父类没有这个方法,那么一定是在子类声明了。下面我们来验证一下。...站在 Android 开发者角度,实际上官方是不建议我们使用枚举。 枚举占用空间通常是静态常量两倍。你应该严格避免在 Android使用枚举。 其实我并不是完全赞同。

    66730

    深度了解Android 7.0 ,你准备好了吗?

    ● 自定义视图:两个新 API ,在通知中使用自定义视图时可以充分利用系统装饰元素,通知标题和操作。 ?...Vulkan是完全从零开始设计,以最小化驱动器 CPU 开销,并能让应用更直接地控制 GPU 操作。Vulkan还允许多个线程同时执行工作,命令缓冲区构建,以获得更好并行化。...十三 Android  ICU4J API ICU4J 是一个广泛使用开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。...Android N 在android.icu软件包下显示 Android 框架 ICU4J API 子集,供应用开发者使用。...如果已在应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供android.icu API 可以大量节省 APK 大小。

    1.4K30

    Android组件化专题-路由动态注入跳转参数以及获取其他模块fragment

    微信公众号:Android研究院 关注可了解更多Android知识,专注于移动领域,不知代码还有人生哲学。...最为一名有梦想码农,我理想写法: 在相应Activity,通过一个注解就可以拿到跳转传递过来参数值,然后直接使用。...; } //检查是否配置group如果没有配置 则从path截取组名 checkRouterGroup(routerMeta)...image.png 到此为止,我们路由框架实现了以下功能: 支持直接解析标准URL路由地址进行跳转,并自动注入参数到目标页面 支持多模块工程使用 支持模块间通信 支持获取其他模块fragment...Android组件化专题: 组件化配置 APT实战 路由框架原理 模块间业务通信

    2K20

    实习入职第五天:参数可变参数等小知识点

    Returns: the ordinal value of this enum constant. java.lang.Enum.ordinal()方法返回此枚举常量序数(其枚举声明位置,其中初始常量分配序数为零...如果没有设置adapter则tempadapter与我们自己adapter是一样。   ...我们自定义adapter里面的getitem方法里面返回position是不包括header,是我们自定义adapter数据position编号从0开始,也就是说与我们传进去list位置是一样...> arg0, View arg1, int arg2,long arg3)   arg2是当前click位置,这个位置是指在tempadapter位置,从0开始如果listview添加了header...也就是说当我们在使用点击事件时,listView列位置为arg2-1   一般在开发,为了达到我们想要动态添加效果主要做法是:在listview.setadapter之前添加所需要控件

    52020

    7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

    在日常开发,我们经常会有格式化需求,日期格式化、数字格式化、钱币格式化等等。...0-9这是个digit就可以用来表示number,1024就是由1、0、2、4这四个digit组成 看了这个表格符号规则,估计很多同学还是一脸懵逼。...- 0个数决定整数部分长度,不够高位补0;#则无此约束,N多个#是一样效果 小数部分: - 可保留小数点后N位(0和#效果一样) - 若小数点后位数不够,若使用0那就低位补0,若使用#就不补...sourceStrPattern, args); System.out.println(formatedStr); } 运行程序,输出: Hello girl,my name is YourBatman 有没有似曾相似的感觉...说明:还是那句话,没有绝对谁好谁坏,如果你系统对性能不敏感,那就是方便第一 经典使用场景 这个就很多啦,最常见有:HTML拼接、SQL拼接、异常信息拼接等等。

    2.1K00
    领券