今天,简单讲讲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多语言存在的问题相关推荐

  1. android 使用String.format(%.2f,67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号...

    市场人员反映公司的app使用系统设置俄语.西班牙语,double数据会把小数点变为逗号.调试一下,是自定义的语言时候(例如,俄语.西班牙语)转换String.format("%.2f&quo ...

  2. android string.format()长度,Android通过String.format格式化(动态改变)字符串资源的显示内容...

    一.实现效果: 最近在项目中需要做类似于上图显示的效果,里面的数字和称谓是动态获取的,对于这种显示效果,有如下两种解决方案来处理: (1)通过代码动态设置TextView的内容,比如: /** * 显 ...

  3. 我的Android进阶之旅------Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题...

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的And ...

  4. java里format报错,我的Android进阶之旅------Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题...

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 地址:ht ...

  5. string.Format出现异常输入的字符串格式有误的解决方法

    今天在做项目时,碰到一个很奇怪的问题,我使用string.Format居然报"输入的字符串格式有误"的错误,我调了很久,还是不对,不明白错在哪里,后来还是google了一下,原来我 ...

  6. Android中String资源文件的format方法

    很多时候我们感性Google在设计 Android时遵守了大量 MVC 架构方式,可以让写公共代码.美工和具体逻辑开发人员独立出来.有关Android 的资源文件values/strings.xml中 ...

  7. Java / Android String.format 的使用

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. 自己使用的地方1 拼接字符串 2 ,多语言文字顺序不同问题,例如中文:距离到公司还有30分钟, 时间是接口获取的, ...

  8. android String.format

    资源创建: <!-- 多参数验证 -->     <string name="text">截止到:%1$tc\n销售量比去年增长了%2$d%%\n在这里我对 ...

  9. Android String.xml 批量翻译工具 | Android string.xml 各国语言转换

    来了需求,需要增加对英文的支持. 可是我们项目里大概2000多个中文字符串,一个一个翻译,太慢了. 写了一个java 的程序,可以输入一个android 的String.xml文件,输出一个xml 里 ...

最新文章

  1. TypeError: Caught TypeError in DataLoader worker process 0.
  2. 数据科学工具 Jupyter Notebook 教程(二)
  3. thrift - C#(CSharp)客户端连接池(ConnectionPool)
  4. 8家大厂SSP offer的清华学长谈算法岗是否人间地狱(送七本学长手写iPad笔记)...
  5. _MSC_VER详细介绍
  6. vue组件的生命周期和执行过程
  7. QT5 QSqlQuery的SELECT INSERT UPDATE DELETE命令用法
  8. c++ 中——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
  9. swustoj水王C语言,swust西南科技大学OJ数据结构80题答案
  10. 给所有使用FMX(FireMonkey)进行开发的忠告!
  11. win10计算机策略组在哪,win10家庭版的组策略在哪里打开
  12. SPSS 实现KMO和Bartlett的球形度检验
  13. 手动连接wifi失败分析
  14. 第十三周 项目2第11章习题9
  15. OPPO手机进水不读卡,修复
  16. 果蔬净化器哪个牌子好,果蔬净化器科普
  17. 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
  18. SAP:采购申请ME51N/ME52N/ME54N/ME57屏幕增强
  19. 《计算机程序的构造和解释》阅读笔记:准备(3)【python3简单实现lisp解释器(3)】
  20. 摘要、引言和结论的六项区别

热门文章

  1. 自动化运维工具 Ansible
  2. Python学习札记(二十八) 模块1
  3. WebSphere Application Server v6中的问题诊断以及日志策略
  4. C++-运行时类型信息,异常(day11)
  5. sublime text3支持Vue语法高亮显示步骤(转)
  6. @codeforces - 1106F@ Lunar New Year and a Recursive Sequence
  7. OC仿支付宝输入UITextField输入车牌号
  8. mysql数据库操作指令汇总
  9. WPF将Ui保存为图片和保存位图
  10. Eclipse中看java源代码