String format的使用

来源:互联网 发布:mac抹掉磁盘格式选哪个 编辑:程序博客网 时间:2024/05/26 02:52

     好吧,不得不先赞下format的强大!

接下来熟悉下JDK1.5中,String类新增的一个很有意思的静态方法String.format();

1.首先两个重载方法:

1.1一个是三个参数的: public static String format(Locale l, String format, Object ... args)

其中Locale类表示了特定的地理,政治和文化区域,有三个构造方法分别指明语言参数language + 国家/地区参数country + variant..;

             locale也就是用来指定使用的语言环境;

format : 指定格式化字符的转换规则

args : 要被格式化的字符串或日期

1.2一个是两个参数的:public static String format(String format, Object... args)

内容同上啦

2.首先说下使用的方法:

2.1.常规类型、字符类型和数值类型的格式说明符的语法如下
%[argument_index$][flags][minSize][.precision]conversion

    可选的 argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。 
      可选的 flags 是修改输出格式的字符集。有效标志的集合取决于转换类型。  

      可选 minSize是一个非负十进制整数,表明要向输出中写入的最少字符数。 
      可选 precision 是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。 
      所需的 conversion 是一个表明应该如何格式化参数的字符。给定参数的有效转换集合取决于参数的数据类型。


2.1日期类型Date,Calendar和毫秒long型的格式转化

%[argument_index$][flags][minSize]conversion

可选的 argument_index 、flags 和minSize的定义同上。 
所需的 conversion 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。

e.g 在使用日期转换时:(那今天距离)
年:TY 对应2014;  Ty对应14
月Tm;   01  (小写m对应月,大写M对应分钟)
 日Td;   07
  时TH;  11
分TM;   35
  秒TS; 34
如输出当前出生的baby的具体时间:格式为:yyyy-MM-dd HH:mm:ss
Calendar calendar = Calendar.getInstance();
String sc = String.format("Flag's Birthday Detail is: %1$TY-%1$tm-%1$td %1$tH:%1$tm:%1$tS", calendar);
System.out.println(sc);

输出 : Flag's Birthday Detail is: 2014-01-07 11:01:34

之后就是多个参数的:\
e.g
long now = System.currentTimeMillis();
Calendar calendar = Calendar.getInstacne();
sc = String.format("Flag's birthday ss: %1$TY-%1$Tm-%1$Td %1$TH:%1$TM:%1$TS. Flag2's Year: %2$Ty", now, calendar);
System.out.println(sc);
输出:Flag's birthday ss: 2014-01-07 11:30:34. Flag2's Year: 14

2.3与参数不对应的格式说明符的语法:

%[flags][width]conversion

可选 flags 和 width 的定义同上。 
所需的 conversion 是一个表明要在输出中所插内容的字符。

转换 
转换可分为以下几类: 
1. 常规 - 可应用于任何参数类型 
2. 字符 - 可应用于表示 Unicode 字符的基本类型:char、Character、byte、Byte、short 和 Short。当 Character.isValidCodePoint(int) 返回 true 时,可将此转换应用于 int 和 Integer 类型 
3. 数值 
      1. 整数 - 可应用于 Java 的整数类型:byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger 
      2. 浮点 - 可用于 Java 的浮点类型:float、Float、double、Double 和 BigDecimal 
4. 日期/时间 - 可应用于 Java 的、能够对日期或时间进行编码的类型:long、Long、Calendar 和 Date。 
5. 百分比 - 产生字面值 '%' ('\u0025') 
6. 行分隔符 - 产生特定于平台的行分隔符


接下来测试下:

测试一个json,

[{"goods":[{"count":2,"style":"1","id":"8","tag":1,"size":1}],"id":"2"}]

随意改变里面内容:

String json = "[{\"goods\":[{\"count\":2,\"style\":\"1\"," +
"\"id\":\"8\",\"tag\":1,\"size\":1}],\"id\":\"2\"}]";

int count = 3;
String style = "花式";
String id = "11";
String tag = "裤子";
String size = "MX";
int goodsId = 1104;

json = String.format("[{\"goods\":[{\"count\":%s,\"style\":%s," +
"\"id\":%s,\"tag\":%s,\"size\":%s}],\"id\":%s}]", count, style, id, tag, size, goodsId);

System.out.println(json);

json = String.format("[{\"goods\":[{\"count\":%1$s,\"style\":%2$s," +
"\"id\":%3$s,\"tag\":%4$s,\"size\":%5$s}],\"id\":%6$s}]", count, style, id, tag, size, goodsId);
System.out.println(json);


输出如下:

[{"goods":[{"count":3,"style":花式,"id":11,"tag":裤子,"size":MX}],"id":1104}]
[{"goods":[{"count":3,"style":花式,"id":11,"tag":裤子,"size":MX}],"id":1104}]


写到这里,只想说一句话了:format方法的第一个参数其实就是要输出的内容,在这个里面定义好模板和各种规则,而第二个可变参数Object[ ]...其实就是往第一个参数里面塞各种元素的一个池子,暂时练习到这里。


另外,本文来源:

http://blueram.iteye.com/blog/441683





0 0
原创粉丝点击