android 解决String.format多语言存在的问题
今天,简单讲讲android里如何解决String.format在切换语言时存在的问题。
之前,我写过一篇博客,讲关于String.format的基本使用,大家如果没有看过,建议看看或者去网上查找资料。但是昨天,发现当手机切换成阿拉伯语时,String.format格式化的数据是一串奇怪的字符串。于是在网上查找资料,最终解决了问题。这里记录一下。
这里还是先回顾一下String.format的基本使用:
示例
常规类型的格式化
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。
format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
显示不同转换符实现不同数据类型到字符串的转换,如图所示。
转 换 符 |
说 明 |
示 例 |
%s |
字符串类型 |
"mingrisoft" |
%c |
字符类型 |
'm' |
%b |
布尔类型 |
true |
%d |
整数类型(十进制) |
99 |
%x |
整数类型(十六进制) |
FF |
%o |
整数类型(八进制) |
77 |
%f |
浮点类型 |
99.99 |
%a |
十六进制浮点类型 |
FF.35AE |
%e |
指数类型 |
9.38e+5 |
%g |
通用浮点类型(f和e类型中较短的) |
|
%h |
散列码 |
|
%% |
百分比类型 |
% |
%n |
换行符 |
|
%tx |
日期与时间类型(x代表不同的日期与时间转换符 |
我之前使用的是String format(String format, Object... args)这个函数,我现在来看看源码:
public static String format(String format, Object... args) {return format(Locale.getDefault(), format, args); }
可以看见String format(String format, Object... args)最终还是调用了format(Locale locale, String format, Object... args) 这个函数,不过语言是使用手机默认的语言,所以当切换成阿拉伯语时,出现了一串阿拉伯字符串。但是我需要的是英文的字符串,那该怎么办呢?
这个我们可以指定格式化的Locale 为英语,就可以解决这个问题。如
String.format(Locale.ENGLISH,"%04d%02d%02d %02d:%02d:00", Integer.valueOf(myYear), Integer.valueOf(myMonth), Integer.valueOf(myDay), Integer.valueOf(myHour), Integer.valueOf(myMinute));这样无论手机切换成什么语言,都格式化成英语的字符串。
接下来看看format(Locale locale, String format, Object... args) 的源码:
public static String format(Locale locale, String format, Object... args) {if (format == null) {throw new NullPointerException("format == null"); }int bufferSize = format.length() + (args == null ? 0 : args.length * 10); Formatter f = new Formatter(new StringBuilder(bufferSize), locale); return f.format(format, args).toString(); }
其实String.format(Locale locale, String format, Object... args)内部使用的是Formatter这个类进行格式化,这里首先根据参数的数量创建不同bufferSize(大小)的Formatter,同时指定了Formatter格式化的语言,然后调用f.format(format, args).toString()格式化字符串。关于Formatter,我会写一篇博客专门讲这个类。大家也可以自己去网上查找资料。
android 解决String.format多语言存在的问题就讲完了。
就这么简单。
android 解决String.format多语言存在的问题相关推荐
- android 使用String.format(%.2f,67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号...
市场人员反映公司的app使用系统设置俄语.西班牙语,double数据会把小数点变为逗号.调试一下,是自定义的语言时候(例如,俄语.西班牙语)转换String.format("%.2f&quo ...
- android string.format()长度,Android通过String.format格式化(动态改变)字符串资源的显示内容...
一.实现效果: 最近在项目中需要做类似于上图显示的效果,里面的数字和称谓是动态获取的,对于这种显示效果,有如下两种解决方案来处理: (1)通过代码动态设置TextView的内容,比如: /** * 显 ...
- 我的Android进阶之旅------Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题...
今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的And ...
- java里format报错,我的Android进阶之旅------Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题...
今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 地址:ht ...
- string.Format出现异常输入的字符串格式有误的解决方法
今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报"输入的字符串格式有误"的错误,我调了很久,还是不对,不明白错在哪里,后来还是google了一下,原来我 ...
- Android中String资源文件的format方法
很多时候我们感性Google在设计 Android时遵守了大量 MVC 架构方式,可以让写公共代码.美工和具体逻辑开发人员独立出来.有关Android 的资源文件values/strings.xml中 ...
- Java / Android String.format 的使用
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. 自己使用的地方1 拼接字符串 2 ,多语言文字顺序不同问题,例如中文:距离到公司还有30分钟, 时间是接口获取的, ...
- android String.format
资源创建: <!-- 多参数验证 --> <string name="text">截止到:%1$tc\n销售量比去年增长了%2$d%%\n在这里我对 ...
- Android String.xml 批量翻译工具 | Android string.xml 各国语言转换
来了需求,需要增加对英文的支持. 可是我们项目里大概2000多个中文字符串,一个一个翻译,太慢了. 写了一个java 的程序,可以输入一个android 的String.xml文件,输出一个xml 里 ...
最新文章
- TypeError: Caught TypeError in DataLoader worker process 0.
- 数据科学工具 Jupyter Notebook 教程(二)
- thrift - C#(CSharp)客户端连接池(ConnectionPool)
- 8家大厂SSP offer的清华学长谈算法岗是否人间地狱(送七本学长手写iPad笔记)...
- _MSC_VER详细介绍
- vue组件的生命周期和执行过程
- QT5 QSqlQuery的SELECT INSERT UPDATE DELETE命令用法
- c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
- swustoj水王C语言,swust西南科技大学OJ数据结构80题答案
- 给所有使用FMX(FireMonkey)进行开发的忠告!
- win10计算机策略组在哪,win10家庭版的组策略在哪里打开
- SPSS 实现KMO和Bartlett的球形度检验
- 手动连接wifi失败分析
- 第十三周 项目2第11章习题9
- OPPO手机进水不读卡,修复
- 果蔬净化器哪个牌子好,果蔬净化器科普
- 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
- SAP:采购申请ME51N/ME52N/ME54N/ME57屏幕增强
- 《计算机程序的构造和解释》阅读笔记:准备(3)【python3简单实现lisp解释器(3)】
- 摘要、引言和结论的六项区别
热门文章
- 自动化运维工具 Ansible
- Python学习札记(二十八) 模块1
- WebSphere Application Server v6中的问题诊断以及日志策略
- C++-运行时类型信息,异常(day11)
- sublime text3支持Vue语法高亮显示步骤(转)
- @codeforces - 1106F@ Lunar New Year and a Recursive Sequence
- OC仿支付宝输入UITextField输入车牌号
- mysql数据库操作指令汇总
- WPF将Ui保存为图片和保存位图
- Eclipse中看java源代码