目录
原文链接:https://blog.csdn.net/android157/article/details/112448721
2.1、例1:“我叫小五,今年23岁了,毕业于家里蹲,目前就职于老牛公司,薪资9000”。
2.2、例二:“我叫小五,今年23岁了,毕业于家里蹲,目前就职于老牛公司,薪资9000.00”。
一、问题
在实际开发过程中会有如下的业务:在一个Textview需要显示”我叫xxx,今年xxx岁了,毕业于xxx,目前就职于xxx,薪资xxx” 。
其中的 xxx 是变化的, 每个用户也是不一样的 。
作为老司机的你,遇到这种情况会怎么样解决呢?写多个TextView ,分别进行赋值吗?这样做的话,怎么能担负得起老司机的称号呢?我们应该遵循Google的开发模式,通过string和String.format()搭配,来实现这一需求。接下来,上车,系好安全带,发车喽~
二、解决
2.1、例1:“我叫小五,今年23岁了,毕业于家里蹲,目前就职于老牛公司,薪资9000”。
在string.xml中可以这样写:
<resources>
<string name="old">我叫%s,今年%d岁了,毕业于%s,目前就职于%s,薪资%.0f</string>
</resources>
在业务代码中这样写:
LineTextView lineTextView = findViewById(R.id.lineTextView);
String formatStr = getResources().getString(R.string.old);
lineTextView.setText(String.format(formatStr, "小五", 23, "家里蹲", "老牛公司", 9000.0));
然后,我们进行分析。
“我叫小五,今年23岁了,毕业于家里蹲,目前就职于老牛公司,薪资9000” ,
首先,把这句话中的变量找出来,分别是“小五”、“23”、“家里蹲”、“老牛公司”、“9000”,这些是我要实时变化的变量。和业务相关,这里我暂定以上5个关键词为变量。
下一步, 区分变量的类型,我这五个变量中有字符串类型(小五 、家里蹲、老牛公司)、整型(23)、和浮点型(9000)。
第三步,用占位符表示变量,%s表示字符串、%d表示整型、%f表示浮点型,重新组装句子为:“我叫%s,今年%d岁了,毕业于%s,目前就职于%s,薪资%f”。
第四步,使用String.format(String format, Object... args)进行格式化,填充内容。String.format(“我叫%s,今年%d岁了,毕业于%s,目前就职于%s,薪资%f”, "小五", 23, "家里蹲", "老牛公司", 9000.0) ,第一个“%s”对应“小五”,第二个“%d”对应23,第三个“%s”对应“家里蹲”,第四个“%s”对应“老牛公司”,第五个“%f”对应9000.0,将实参和占位符形参对应上就可以了。
2.2、例二:“我叫小五,今年23岁了,毕业于家里蹲,目前就职于老牛公司,薪资9000.00”。
例二 和 例一 的区别就在于薪资的小数点位数,来看看实现两位小数点该怎么写。
在string.xml中可以这样写:
<resources>
<string name="old">我叫%s,今年%d岁了,毕业于%s,目前就职于%s,薪资%.2f</string>
</resources>
在业务代码中这样写:
LineTextView lineTextView = findViewById(R.id.lineTextView);
String formatStr = getResources().getString(R.string.old);
lineTextView.setText(String.format(formatStr, "小五", 23, "家里蹲", "老牛公司", 9000.0));
然后,我们进行分析。
细心的你是否已经发现了两者的不同,其实差别只有一点点,在string的语句中 ,例一是这样写的“薪资%.0f”,例二是这样写的“薪资%.2f”。没错,“.”后面的数字代表的就是要保留小数位数,聪明的你学会了吗?
三、扩展
3.1、重载方法
// 使用本地语言(Locale.getDefault())格式化字符串
String String.format(String fmt, Object... args);
// 自定义语言环境格式化字符串
String String.format(Locale locale, String fmt, Object... args);
3.2、占位符
占位符完整格式为: %[index$][标识][最小宽度][.精度]转换符 。