在Android中想要格式化字符串,可以通过getString(int resId, Object... formatArgs)方法完成,它是在抽象类Context中实现的final方法,因此在Activity等类中只能使用,不能被重写。其中参数resId是在strings.xml中定义的资源的ID,可变参数formatArgs是需要格式化的字符串。
其中,%1代表第一个需要格式化的参数,$s表示参数类型为字符串;注意在String.xml中定义格式化的字符串要写成%1$s的形式,不能直接写成%s。
但也要注意,Android官网建议Formatter类格式化日期的功能应该用 SimpleDateFormat类来代替。
例如要格式化日期,可以在strings.xml中定义如下的名值对:
<string name="date_format">日期:%1$s日-%2$s月-%3$s年</string>
其中,%1代表第一个需要格式化的参数,$s表示参数类型为字符串;注意在String.xml中定义格式化的字符串要写成%1$s的形式,不能直接写成%s。
在Activity中调用如下:
getString(R.string.date_format,"8","6","2014"); // 日期:8日-6月-2014年
但也要注意,Android官网建议Formatter类格式化日期的功能应该用 SimpleDateFormat类来代替。
还可以使用下面的方法格式化字符串
<string name="signin_upload_count">上传人数:%1$d</string>
String valueString = getResources().getString(R.string.signin_upload_count);
valueString = String.format(valueString, 2);
从上面这行字符串的定义可以看出,格式化字符串资源的格式为:
%+参数位置+$+格式化类型,其中:
参 数 位 置:从1开始依次编号,String.forma方法的第二个参数为格式化的第一个参数,后面依次递增;
%n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00
格式化类型:
s 字符串
f 浮点数
d 整型数
c 字符类型
在string.xml文件中定义好格式化的字符串资源,通过代码动态设置字符串内容时,必须确保String.format方法里面的参数不少于字符串资源中定义的格式化参数个数(实践证明多了参数是不会报异常的)。