java中:

从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 format()。这个方法到现在用的人还是不多,实在是一种浪费。本文带你快速过一遍这个方法的功能,将来你要用到格式化文本的时候,可能就不需要再借用第三方类库或自己去实现了。

首先看一个简单例子:

String formatted = String.format("%s今年%d岁。", "小李", 30); // "小李今年30岁。"

不用我多解释,你也可以看出:

  1. 这个方法第一个参数是格式串,后面的参数都是格式串的参数,用于替换格式串中的占位符。
  2. 占位符以 "%x" 的形式表示,不同的参数类型要用不同的字母。后面会具体介绍。
  3. String.format() 返回值类型为字符串,也就是格式化的结果。

一、占位符类型

占位符 "%" 后面的字母决定了其接受的实际参数的类型。占位符类型有下面几种:

字母 适用参数类型 说明
%a 浮点数 以16进制输出浮点数
%b / %B 任意值 如果参数为 null 则输出 false,否则输出 true
%c / %C 字符或整数 输出对应的 Unicode 字符
%d 整数 对整数进行格式化输出
%e / %E 浮点数 以科学记数法输出浮点数
%f 浮点数 对浮点数进行格式化输出
%g / %G 浮点数 以条件来决定是否以科学记数法方式输出浮点数
%h / %H 任意值 以 16 进制输出参数的 hashCode() 返回值
%o 整数 以8进制输出整数
%s / %S 字符串 对字符串进行格式化输出
%t 日期时间 对日期时间进行格式化输出
%x / %X 整数 以16进制输出整数
%n 换行符
%% 百分号本身

大写字母表示输出的字母都为大写。

我们平常用的最多的就是 %s%d 和 %f,偶尔会用到 %t。本文篇幅有限,仅介绍这四种,剩下的请自行阅读 API 文档

二、字符串和整数格式化

这里直接给出例子来说明:

// 补齐空格并右对齐:
String.format("%10s, world", "Hello"); // 输出 " Hello, world"
String.format("%8d", 123); // 输出 " 123" // 补齐空格并左对齐:
String.format("%-10s, world", "Hello"); // 输出 "Hello , world"
String.format("%-8d", 123); // 输出 "123 " // 补齐 0 并对齐(仅对数字有效)
String.format("%08d", 123); // 输出 "00000123"
String.format("%-08d", 123); // 错误!不允许在右边补齐 0 // 输出最多N个字符
String.format("%.5s", "Hello, world"); // 输出 "Hello"
String.format("%.5s...", "Hello, world"); // 输出 "Hello..."
String.format("%10.5s...", "Hello, world"); // 输出 " Hello..." // 输出逗号分隔数字
String.format("%,d", 1234567); // 输出 "1,234,567"

三、日期格式化

这个就稍微复杂点,但如果你要在字符串中对文本数字和日期进行混排的话,只调一个方法应该比结合 DateFormat 和 NumberFormat 一起用要方便点。

首先补充一个知识,就是占位符可以指定某个位置的参数,格式为 %n$。例如 %2$d 表示第二个整形参数。注意这里的 n是 1 开始而不是 0 开始。

格式化日期的时候,需要多个占位符指向同一个参数(以避免同一个参数重复几遍),同时因为 "t" 表示日期时间,所以完整的格式为 %n$tX,其中 X 表示取时间中的哪一部分。X 的可选值例如:

Y=年;m=月;d=日;H=时;M=分;S=秒;L=毫秒;A=星期几(名称);B=月份名称;

还有其他的字母,具体请参考 API 文档。下面是一个例子:

 
// 输出格式为 “Now is         15:04:52, 星期日”
// 注意 "%1$10tH" 中的 10 同样表示空格补齐 10 位并右对齐
String.format("Now is %1$10tH:%1$tM:%1$tS, %1$tA", new Date()) js中:

//两种调用方式
 var template1="我是{0},今年{1}了";
 var template2="我是{name},今年{age}了";
 var result1=template1.format("loogn",22);
 var result2=template2.format({name:"loogn",age:22});

//两个结果都是"我是loogn,今年22了"

--------------------------------------------------------------------------

var a = "I Love {0}, and You Love {1},Where are {0}! {4}";
alert(String.format(a, "You","Me"));

alert(a.format("You","Me"));

String.prototype.format = function(args) {
var result = this;
if (arguments.length > 0) {
if (arguments.length == 1 && typeof (args) == "object") {
for (var key in args) {
if (args[key] != undefined) {
var reg = new RegExp("({" + key + "})", "g");
result = result.replace(reg, args[key]);
}
}
}
else {
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] != undefined) {
//var reg = new RegExp("({[" + i + "]})", "g");//这个在索引大于9时会有问题,谢谢何以笙箫的指出
var reg = new RegExp("({)" + i + "(})", "g");
result = result.replace(reg, arguments[i]);
}
}
}
}
return result;
}
String.format = function () {
if (arguments.length == 0)
return null; var str = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
str = str.replace(re, arguments[i]);
}
return str;
}
 

string.format()详解的更多相关文章

  1. 【转】Java魔法堂:String.format详解

    Java魔法堂:String.format详解     目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六. ...

  2. String.format详解(转)

    一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", " ...

  3. Java魔法堂:String.format详解

      目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六.对浮点数进行格式化     七.对日期时间进行格式化 ...

  4. 【转】String.format详解

    一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", " ...

  5. java String.Format详解

    JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...

  6. 【转】declare-styleable的使用(自定义控件) 以及declare-styleable中format详解

    原文网址:http://www.cnblogs.com/622698abc/p/3348692.html declare-styleable是给自定义控件添加自定义属性用的 1.首先,先写attrs. ...

  7. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  8. 小白的Python之路 day5 random模块和string模块详解

    random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...

  9. C++之string类型详解

    C++之string类型详解 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个泛型类出现,他集成的操作函 ...

随机推荐

  1. IO流 读写文件

    读写文件 如前所述,一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 下图是一个描述输入流和输出流的类层次图. 下面将要讨论的两个重要的流是 FileInputStream ...

  2. Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it!

    Delphi 安装Cnpack cnvcl后界面不断弹出 Memory Manager's list capablity overflow ,please enlarge it! 解决方法:删除指定  ...

  3. springboot实战(汪云飞)学习-1-2

    java EE开发的颠覆者 spring boot 实战 随书学习-1 接上一篇,Java配置的学习(还是上一篇的项目中,添加新的包和代码): java配置是spring4.x推荐的配置方式,可以完全 ...

  4. php strtoupper()函数 语法

    php strtoupper()函数 语法 作用:把所有字符转换为大写 语法:strtoupper(string) 参数: 参数 描述 string 必须,规定要转换的字符串 说明:strtouppe ...

  5. nRF51822 蓝牙低功耗和 2.4GHz 专利 SoC

    DESCRIPTION nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超低功耗无线应用. nRF51822 基于配备 256kB f ...

  6. VS中C语言scanf函数报错

    在VS中创建C项目使用scanf方法时会如下报错 解决方案 方法1:文件中设置 在第一行设置代码    #define _CRT_SECURE_NO_WARNINGS 或者添加警告忽略     #pr ...

  7. Bootstrap Date Range Picker

    var optionSet1 = { startDate: moment().subtract(29, 'days'), endDate: moment(), minDate: '12/21/2012 ...

  8. 用.NET做圣诞节音乐盒

    用.NET做圣诞节音乐盒 我曾经用这个程序送给我女朋友(现老婆)

  9. “希希敬敬对”队软件工程第九次作业-beta冲刺第六次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第六次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...

  10. js try{}catch(e){}的理解

    程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...