转自:https://www.cnblogs.com/cherrychen-cakuta/p/7021325.html
小编虽然是学java出生,但工作之后就一直从事android开发,很多java基础都忘记完了,最近一年从ES换到了AS,原来的很多习惯都收到了挑战,比如我喜欢ES写方法的时候先在JAVA project中写个main方法验证下对不对,比如数据拆分,时间对比等等,但AS使用中,因为和ES很多环境变量冲突,就把ES卸载了,现在很多都不方便。
在开发中使用比较多的就是设置view的值/给view填充值得时候,需要格式化数据,小编今天用了一写时间,做了下小小的整理
1.%s 字符串类型
用处:多用于字符串拼接
示例:
String str = String.format("拼接字符,%s", "dddd");
Logs.e("fuqinming", str);
str = String.format("拼接字符,%s", 1);
Logs.e("fuqinming", str);
str = String.format("拼接字符,%s", true);
Logs.e("fuqinming", str);
下面为各种传值类型以及得到的值:
1 2 3 | 06-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符,dddd 06-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符,1 06-15 11:21:56.862 21904-21904/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符, true |
结果小结:
该占位符不规定后面的传值类型,都会变成string类型,类似
String str=“拼接字符,”+传入值
2.%c 字符类型
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/48304ba5e6f9fe08f3fa1abda7d326ab.gif)
String str = String.format("拼接字符,%c", 'A');
Logs.e("fuqinming", str); str = String.format("拼接字符,%c", "d");
Logs.e("fuqinming", str);
str = String.format("拼接字符,%c", 1);
Logs.e("fuqinming", str);
str = String.format("拼接字符,%c", true);
Logs.e("fuqinming", str);
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/48304ba5e6f9fe08f3fa1abda7d326ab.gif)
下面为得到的结果:
1 2 3 4 5 | 06-15 11:31:00.502 2038-2038/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符,A 报错 报错 报错 报错 |
3.%b布尔类型
用处:可用于android中直接打出一个判断是否正确
示例:
1 2 3 4 5 6 7 8 | String str = String.format( "对比结果为:%b" , 1+1!=2); Logs.e( "fuqinming" , str); str = String.format( "拼接字符,%b" , "d" . equals ( "A" )); Logs.e( "fuqinming" , str); str = String.format( "拼接字符,%b" , 1); Logs.e( "fuqinming" , str); str = String.format( "拼接字符,%b" , ! true ); Logs.e( "fuqinming" , str); |
结果:
1 2 3 4 | fuqinming对比结果为: false fuqinming拼接字符, false fuqinming拼接字符, true fuqinming拼接字符, false |
结果小结:
String.format(“其他拼接字符%b”,判断语句/其他);如果传值不是判断语句那么得到的值,默认为true
4.%d整数类型(十进制)
用处:已经忘记什么是十进制数,也忘记怎么算进制数了,不过依稀记得十进制数就是我们平常看到的数,比如100就是100这样,在android中可用来获取计算得到的int值
示例:
1 2 3 4 5 6 7 8 | String str = String.format( "拼接字符,%d" , 1); Logs.e( "fuqinming" , str); str = String.format( "拼接字符,%d" , 1 / 2); Logs.e( "fuqinming" , str); str = String.format( "对比结果为:%d" , 1 + 1 != 2); Logs.e( "fuqinming" , str); str = String.format( "拼接字符,%d" , "d" . equals ( "A" )); Logs.e( "fuqinming" , str); |
得到的结果:
1 2 3 4 | 6-15 11:50:37.190 15215-15215/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符,1 06-15 11:50:37.190 15215-15215/com.cqfmbank.fmbankmobile E/fuqinming: 拼接字符,0 报错 报错 |
结果小结:String.fromat(“拼接字符串%d”,计算),传入的值可以为int,double,lang,float等值,得到的是int,0.60为0,并不是四舍五入
前沿:前面四点是本人早上写的,晚上回来补充的时候,发现自己的es虽然android环境不行,但是写java代码还是可以的,顾本人下面的代码片来自于es的java project
5.%x整数类型(十六进制)
使用:特殊计算
示例:
1 2 3 4 5 6 7 8 9 10 11 12 | public static void main(String[] args) { String str=String.format( "%x" ,100); System. out .println(str); str=String.format( "%x" ,100/2); System. out .println(str); // str=String.format("%x",101.f); // System.out.println(str); // str=String.format("%x",1000.00); System. out .println(str); str=String.format( "%x" , true ); System. out .println(str); } |
示例结果:
1 2 3 4 5 6 7 8 9 10 11 | 64 32 32 Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:11) |
结果小结:
以用于做特殊运算,但是传参必须是int类型,其他类型会直接报错,在android开发中,很少会遇到这种特殊运算,顾运用价值并不`大
6.%o整数类型(八进制数)
使用:特殊计算,认为在android中使用意义不大
示例:
1 2 3 4 5 6 7 8 9 10 11 12 | public class dd { public static void main(String[] args) { String str=String.format( "%o" ,100); System. out .println(str); str=String.format( "%o" ,100/2); System. out .println(str); str=String.format( "%o" ,1000.00); System. out .println(str); str=String.format( "%o" , true ); System. out .println(str); } } |
示例结果:
1 2 3 4 5 6 7 8 9 10 | 44 62 Exception in thread "main" java.util.IllegalFormatConversionException: o != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7) |
结果小结:
tring.format(“%o”,值),值的类型必须是int,如果不是int就会直接报错,该方法比较适合特殊运算,但是android中特殊运算很少,并不使用于android运用。。
6.%f浮点类型
使用:多用于格式化数据,android中也常常使用
java示例
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { String str=String.format( "%.2f" ,100.00); System. out .println(str); str=String.format( "%f" ,100.00); System. out .println(str); str=String.format( "%.8f" ,1000.00); System. out .println(str); str=String.format( "%f" , true ); System. out .println(str); } |
示例结果:
1 2 3 4 5 6 7 8 9 10 11 | 100.00 100.000000 1000.00000000 Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Boolean at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:9) |
结果小结:
String.format("%f",值),需要注意的是值必须为浮点类型,否则会报错,其中在测试中,发现了如下结果
1>当不设定保留小数点后位数的时候,默认会保留6位小数
2>当设定保留小数点后位数超过最大位数的时候,会直接报错,提示超出内存错误
7.%a十六进制浮点类型
使用:特殊运算,在android中基本上没什么用
示例:
1 2 3 4 5 6 7 8 | public static void main(String[] args) { String str=String.format( "%a" ,1000.00); System. out .println(str); str=String.format( "%a" ,1000.f); System. out .println(str); str=String.format( "%a" ,1000); System. out .println(str); } |
示例结果:
1 2 3 4 5 6 7 8 9 10 | x1.f4p9 0x1.f4p9 Exception in thread "main" java.util.IllegalFormatConversionException: a != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7) |
结果小结:
String.format(“%a”,number),传值可以是int也可以是浮点类型,但也只能是number相关类型,否则就会报错,在android中不适用。
8.%e指数类型
使用:在做金融类APP开发中可能会有用
示例:
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { String str=String.format( "%e" ,1000.00); System. out .println(str); str=String.format( "%e" ,1000.f); System. out .println(str); str=String.format( "%e" ,1000); System. out .println(str); str=String.format( "%e" , "ddd" ); System. out .println(str); } |
结果:
1 2 3 4 5 6 7 8 9 10 | 1.000000e+03 1.000000e+03 Exception in thread "main" java.util.IllegalFormatConversionException: e != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7) |
结果小结:
String.format(“%e”,浮点类型),其中传值必须是浮点类型,否则会报错
9.%g通用浮点类型(f和e中较短的)
使用:特殊计算
示例:
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { String str=String.format( "%g" ,10002121212.0025); System. out .println(str); str=String.format( "%g" ,1000.f); System. out .println(str); str=String.format( "%g" ,1000); System. out .println(str); str=String.format( "%g" , "ddd" ); System. out .println(str); } |
示例结果
1 2 3 4 5 6 7 8 9 10 | 1.00021e+10 1000.00 Exception in thread "main" java.util.IllegalFormatConversionException: g != java.lang.Integer at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source) at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source) at java.util.Formatter$FormatSpecifier.print(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.util.Formatter.format(Unknown Source) at java.lang.String.format(Unknown Source) at dd.main(dd.java:7) |
结果小结:String.format(“%g”,浮点类型),传值类型一定要是浮点类型,并且在实际运算中,一定要控制长度,否则就会得到数据异常,在android view获取值的时候报错
10.%h散列码
使用:多在加密算法中使用
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public static void main(String[] args) { String str=String.format(“%h”,10002121212.0025); System. out .println(str); str=String.format(“%h”,1000.f); System. out .println(str); str=String.format(“%h”,1000); System. out .println(str); str=String.format(“%h”,”ddd”); System. out .println(str); str=String.format(“%h”, true ); System. out .println(str); str=String.format(“%h”, false ); System. out .println(str); } |
结果:
1 2 3 4 5 6 | e27d 447a0000 3e8 183e4 4cf 4d5 |
结果小结:
String.format(“%h”,值),任何值类型都会有散列码,顾传值可以是任何值,在android中可以用于自己写加密解密方法,比如我们自己写的加密键盘
11.%%百分比类型
使用:格式化数
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static void main(String[] args) { String str=String.format( "%%" ,10002121212.0025); System. out .println(str); str=String.format( "%%" ,1000.f); System. out .println(str); str=String.format( "%%" ,1000); System. out .println(str); str=String.format( "%%" , "ddd" ); System. out .println(str); str=String.format( "%%" , true ); System. out .println(str); str=String.format( "%d%%" ,1); System. out .println(str); str=String.format( "%.2f%%" ,100.3); System. out .println(str); } |
结果:
1 2 3 4 5 6 | % % % % 1% 100.30% |
结果小结:
%%多用于混用,与其说占位符,还不如更加确切的说是%%就是%号,android中部分格式化的时候可以使用
12.+为正数或者负数添加符
使用:多用于数字格式化
示例:
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { String str=String.format( "%+d" ,1000); System. out .println(str); str=String.format( "%+d" ,-100); System. out .println(str); str=String.format( "%+.2f" ,1000.12); System. out .println(str); str=String.format( "%+.2f" ,-1000.12); System. out .println(str); } |
结果:
1 2 3 4 | 1000 -100 +1000.12 -1000.12 |
结果小结:多用于混用,是不是发比写很多if 方便很多呢
13.小例子格式化钱
1 2 3 | int 转换为,三位,三位,三位这样的数字 String str=String.format( "%,d" ,1000); System. out .println(str); |
结果
含有浮点类型的数字转换
1 2 3 4 5 | public void main(String[] args) { String str=String.format( "%,.2f" ,1000.00); System. out .println(str); } |
得到的结果:
以上知识虽然特别基础,但也算是比较实用的,一般在android中我们都会写的又臭又长,上面的java的格式化方法可是很使用的偶,希望上面的分享对你有用偶。