JScript实现的一个String.Format方法

简介:
  在.NET Framework的BCL类String中,有一个很有用的静态方法 String.Format。当我们在输出一个需要由多个变量条目来组成的字符串时,非常的有用。特别是在对多语言支持时,使用Format方法来显示更加有价值。为了方便脚本编程,下面实现了一个JScript版的Format方法。

    BCL中的String.Format()是一个变参数的方法,第一个参数为格式化字符串,从第二个参数开始为格式化条目中的替换值。由于JavaScript天生就支持任意参数个数,所以可以很自然的实现一个非常sexy的Format方法。

    StringHelper.Format()方法源代码如下:
None.gif  //  StringHelper.Format('{0}, {2}, {1}', 'abc', 'def', 'ghi');
None.gif //
 return "abc, ghi, def".
None.gif 
StringHelper.Format =  function(format)
None.gif {
None.gif     if ( arguments.length == 0 )
None.gif    {
None.gif         return '';
None.gif    }
None.gif     if ( arguments.length == 1 )
None.gif    {
None.gif         return String(format);
None.gif    }
None.gif
None.gif     var strOutput = '';
None.gif     for (  var i=0 ; i < format.length-2 ; )
None.gif    {
None.gif         if ( format.charAt(i) == '{' && format.charAt(i+1) != '{' )
None.gif        {
None.gif             var token = format.substr(i);
None.gif             var index = String(token.match(/\d+/));
None.gif             if ( format.charAt(i+index.length+1) == '}' )
None.gif            {
None.gif                 var swapArg = arguments[Number(index)+1];
None.gif                 if ( swapArg )
None.gif                {
None.gif                    strOutput += swapArg;
None.gif                }
None.gif                i += index.length+2;
None.gif            }
None.gif        }
None.gif         else
None.gif        {
None.gif             if ( format.charAt(i) == '{' && format.charAt(i+1) == '{' )
None.gif            {
None.gif                strOutput += format.charAt(i);
None.gif                i++
None.gif            }
None.gif            strOutput += format.charAt(i);
None.gif            i++;
None.gif        }
None.gif    }
None.gif    strOutput += format.substr(i);
None.gif     return strOutput.replace(/{{/g, '{').replace(/}}/g, '}');
None.gif }

    开始的时候我使用Regular Expression来替换,结果发现问题巨多,多到我只能放弃了,老老实实的遍历替换。如果要保留"{"或"}",使用double来转义,和BCL类库String.Format用法完全一致。

    使用如下测试代码:
None.gif  alert(StringHelper.Format('{0}{0}, {{2}}, {{1}}', 'abc', 'def', 'ghi')); 
None.gif
None.gif  alert(StringHelper.Format('{0}, {{2}}, {1}', 'abc', 'def', 'ghi')); 
None.gif
None.gif  alert(StringHelper.Format('{{0}}\r\n, {2}\r\n, {1}', 'abc', 'def', 'ghi')); 
None.gif
None.gif  alert(StringHelper.Format('{0}{0}{{00}{0}, {{1}}, {{2}}', 'abc', 'def'));

    结果为:
None.gif No.1 alert: abcabc, {2}, {1}
None.gif
None.gif No.2 alert: abc, {2}, def None.gif
None.gif
None.gif No.3 alert: {0} None.gif
None.gif                , ghi None.gif
None.gif                , def
None.gif
None.gif No.4 alert: abcabc{00}abc, {1}, {2}

    您还有更好更高效的实现办法吗?


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
30天前
for循环和String类下方法的一个练习题
for循环和String类下方法的一个练习题
42 1
|
3月前
正则表达式(有关String当中,有关正则的方法)
正则表达式(有关String当中,有关正则的方法)
|
23天前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
23天前
|
XML Java API
List与String相互转化方法汇总
本文汇总了List与String相互转化的多种方法,包括使用`String.join()`、`StringBuilder`、Java 8的Stream API、Apache Commons Lang3的`StringUtils.join()`以及Guava的`Joiner.on()`方法实现List转String;同时介绍了使用`split()`方法、正则表达式、Apache Commons Lang3的`StringUtils.split()`及Guava的`Splitter.on()`方法实现String转List。
List与String相互转化方法汇总
|
1月前
|
Java API 索引
【Java基础面试二十四】、String类有哪些方法?
这篇文章列举了Java中String类的常用方法,如`charAt()`、`substring()`、`split()`、`trim()`、`indexOf()`、`lastIndexOf()`、`startsWith()`、`endsWith()`、`toUpperCase()`、`toLowerCase()`、`replaceFirst()`和`replaceAll()`,并建议面试时展示对这些方法的熟悉度,同时深入理解部分方法的源码实现。
【Java基础面试二十四】、String类有哪些方法?
|
1月前
|
数据安全/隐私保护
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
该博客文章通过示例演示了如何使用session对象的`setAttribute`和`getAttribute`方法在不同页面间传递和显示用户的用户名和密码信息,并说明了如何设置会话的有效期。
作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户
|
1月前
|
Java 索引
Java系列之 String indexOf() 方法
文章详细介绍了Java中`String`类的`indexOf()`方法的四种不同形式及其用法,包括查找字符和子字符串在字符串中的索引,并提供了相应的实例代码和输出结果。
|
2月前
|
Java
Java中将保留四位小数的Double转换为String的方法详解
选择合适的方法,可以使代码更加简洁、高效,同时也能满足不同场景下的需求。
35 5
|
2月前
|
XML Java API
List与String相互转化的方法有哪些
摘要:本文概述了Java中List转换为String及反之的多种策略。使用`String.join()`可简洁地连接List元素;`StringBuilder`提供灵活控制;Java 8 Stream API收集器简化操作;Apache Commons Lang3的`StringUtils.join()`和Guava的`Joiner.on()`支持外部库的高效转换。
|
1月前
|
Dragonfly Dart NoSQL
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的
Dart ffi 使用问题之在Dart中调用String的toNativeUtf8方法时有什么是需要注意的