`
blueram
  • 浏览: 756513 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Java String.Format() 方法及参数说明

阅读更多


JDK1.5中,String类新增了一个很有用的静态方法String.format():
format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。
format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。

举几个这个方法实用的例子(注释是输出结果):
CODE:
long now = System.currentTimeMillis();

String s = String.format("%tR", now);   // "15:12"
CODE:
// Current month/day/year

Date d = new Date(now);

s = String.format("%tD", d);                // "07/13/04"
CODE:
s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"
CODE:
s = String.format("%05d", 123);              // "00123"是不是很方便,让人动心啊?哈哈,还有更多的效果!

其实format函数有些类似c语言中printf函数,一些格式字符串与 C 类似,但已进行了某些定制,以适应 Java 语言,并且利用了其中一些特性。此方法提供了对布局对齐和排列的支持,以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。支持诸如 byte、BigDecimal 和 Calendar 等常见 Java 类型。

产生格式化输出的每个方法都需要格式字符串 和参数列表。格式字符串是一个 String,它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例:

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

格式字符串是 format 方法的第一个参数。它包含三个格式说明符 "%1$tm"、"%1$te" 和 "%1$tY",它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是包括 "Dukes Birthday: " 和其他任何空格或标点符号的固定文本。 参数列表由传递给位于格式字符串之后的方法的所有参数组成。

 

在上述示例中,参数列表的大小为 1,由新对象 Calendar 组成。

1.常规类型、字符类型和数值类型的格式说明符的语法如下

%[argument_index$][flags][width][.precision]conversion

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

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

2.用来表示日期和时间类型的格式说明符的语法如下:
%[argument_index$][flags][width]conversion

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


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. 行分隔符 - 产生特定于平台的行分隔符

 

Double d = 12.3366;
		
		System.out.println(String.format("%2$08d", -3123,-5566));
        System.out.println(String.format("%1$9d", -31));
        System.out.println(String.format("%1$-9d", -31));
        System.out.println(String.format("%1$(9d", -31));
        System.out.println(String.format("%1$#9x", 5689));
        
        //小数点后面两位
        System.out.println(String.format("%1$.2f", 5689.0)); //必须是同类型的才能进行转换
        
        //格式化的位置
        /*String str = "I love ni %s, you love me %s";
        String str2 = "I love ni %2$s, you love me %1$s";
        
        System.out.println(String.format(str, "renjunjie","songliyu"));
        
        System.out.println(String.format(str2, "renjunjie","songliyu"));*/
        
        
        //数组的操作
        Object[] sendData = new Object[4];
        sendData[0] = Integer.valueOf(1);
        sendData[1] = "172.12.1.2";
        sendData[2] = Integer.valueOf(123);
        sendData[3] = "testadfaerfa";
        String sendDataString = String.format("%d,%s,%d,%s",(Object[]) sendData);
        System.out.println(sendDataString);

 

分享到:
评论
8 楼 jimode2013 2013-07-09  
很不错,感谢了
7 楼 haoweishow 2013-04-24  
实用,谢谢啦
6 楼 SE_XiaoFeng 2013-04-24  

还是没有理解,这个String.format()方法的真正作用是什么?
5 楼 Redpick13 2013-03-27  
刚好看完java API,前面一部分正好是它的翻译,楼主辛苦
4 楼 xiaofengfay 2011-08-04  
看不懂  与C#里一样么
3 楼 v韧竹v 2011-01-13  
 
2 楼 guji528 2010-03-10  
很实用,对创建字符序列很有帮助
1 楼 yegaofei 2010-01-04  
很实用,谢谢!!

相关推荐

    JAVA String.format方法使用介绍

    其中format参数指定了输出的格式,是最复杂也是最难掌握的一点,而argues则是一系列等 待被格式化的对象。该函数对c语言中printf函数的用法进行了一定的模仿,因此有c语言基础的人学起来会轻松许多。下面我们着重...

    动态拼接sql语句工具类,拼接where后面语句

    动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty... String sql = String.format(ConstantSql.TEC_TJ_SQL, stringPair.getKey()); log.info("**sql语句:{}",sql);

    java常用工具类的使用

    调用DateFormat对象的format方法可以把Date对象转换成为指定格式的String类型数据。比如: Date today=new Date(); DateFormat df=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA); String result=df....

    Java 加减乘除工具类(解决精度损失问题)

    一共5个方法。。。emmmm.....为啥分这么高呢。因为宝宝想分想疯了。 附代码,有土豪就打赏打赏,没土豪的直接拿去使吧。 package cn.cisdom.base.utils; import java.math.BigDecimal; import java.text....

    Java实验报告(5).doc

    实验序号:3 实验项目名称: 熟练java语法、常用方法、程序结构 "学 号 "10090401xx "姓 名"xx "专业、班 "电子商务1002" "实验地点 "xx "指导教师"xx "时间 "2012.4.26 " 一、实验目的及要求 1. 进一步熟练Java...

    java的一些简单工具类

    WebUtil.java,HtmlUtil.java,PathUtil.java,DateUtil.java,StringFormat.java 有获取ip,获取mac,字符串参数化,时间转换,html标签过滤等方法,下载下来后见项目,放到包里面,注意包名的一致

    aleph-formatter:一个简单而有效的StringFormatter,支持命名参数(带有扭曲)

    字母格式器 Aleph Formatter是用于字符串格式化的轻量级库,它同时支持命名参数和位置参数:它对对象自省的...在简单情况下,Aleph Formatter的性能优于String.format 。 一个jmh基准显示以下结果(越小越好): CPU:

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    玩转模板--自动代码生成工程

    如果各位想用其他数据库,可以自己加载其他数据库的驱动,并修改一下DbOption类下的getTableColumns(String)方法中的查询表信息方法 以及添加类似dm2java.properties数据库类型到java数据类型的映射文件,不同数据库...

    plural-properties:复数属性 (Java)

    复数属性 什么是? Plural Properties (for Java) 允许根据输入选择复数。...它的工作原理几乎与String.format一样,但有一个额外的参数(count 参数)。 PluralProperty.choiceFormat(, , ) 例如: int

    Excel POI读取封装(文件+示范代码)

    List<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>( 0);// 存放其他数据集合 for (int i = startRow; i ; i++) {// 循环行 // ;i的范围是xls坐标中的数字(A‘1’,C‘10’) ...

    zxing.jar java生成二维码

    String format = "png"; //设置map集合要往二维码内添加的参数 @SuppressWarnings("rawtypes") Map map = new HashMap(); //设置二维码的级别 map.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel....

    springmybatis

    其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...

    AIC的Java课程1-6章

     [*]利用Formatter类的printf或format方法格式化输出字符串对象。(System.out对象封装了这两个方法)。 第10章 基本数据结构 4课时  了解和比较静态分配内存空间和动态分配内存空间,能够...

    通过java操作excel表格的工具类库jxl

     很简单和插入单元格的方式一样,不过就是参数多了些,WritableImage这个类继承了 Draw,上面只是他构造方法的一种,最后一个参数不用说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里...

    struts1和struts2的区别

    最后,和Struts1.x最大的革命性的不同是,Struts2处理Action过程中调用的方法(“execute”方法)是不带参数的。那如何获取所需要的对象呢?答案是使用IoC(反转控制,Inversion of Control),也叫“依赖注入...

    ZendFramework中文文档

    StringTrim 14.2.12. StripTags 14.3. 过滤器链 14.4. 编写过滤器 14.5. Zend_Filter_Input 14.5.1. Declaring Filter and Validator Rules 14.5.2. Creating the Filter and Validator Processor 14.5.3. ...

    jsp探针 ver0.1

    private final String windowsParseMacAddress(String ipConfigResponse) throws java.text.ParseException { String localHost = null; try { localHost = java.net.InetAddress.getLocalHost().getHostAddress(); ...

    图片二进制流保存到数据库

    public byte[] GetPictureData(string imagepath) { /**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] ...

    二维码zxing3.3.3.jar包

    String format = "png"; //定义连接地址 String contents = "http://www.jd.com"; //定义二维码的参数 HashMap hints = new HashMap(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8");//设置字符集 ...

Global site tag (gtag.js) - Google Analytics