`
xiaozhi7616
  • 浏览: 192351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dojo笔记03 - 字符串处理

    博客分类:
  • Dojo
阅读更多

 

字符串处理方法

1.3版本的 dojo.string 类中的方法非常精简,源代码只有50多行,直接看源代码吧,清楚一些

if (!dojo._hasResource["dojo.string"]) {
	dojo._hasResource["dojo.string"] = true;
	dojo.provide("dojo.string");

	//rep是repeat的缩写,有效的重复一个字符串N次,生成由同一字符(串)重复组成的字符串	
	dojo.string.rep = function(_1, _2) {
		if (_2 <= 0 || !_1) {
			return "";
		}
		var _3 = [];
		for (;;) {
			if (_2 & 1) {
				_3.push(_1);
			}
			if (!(_2 >>= 1)) {
				break;
			}
			_1 += _1;
		}
		return _3.join("");
	};

	//使用字符补齐字符串
	dojo.string.pad = function(_4, _5, ch, _7) {
		if (!ch) {
			ch = "0";
		}
		var _8 = String(_4), _9 = dojo.string.rep(ch, Math
						.ceil((_5 - _8.length) / ch.length));
		return _7 ? _8 + _9 : _9 + _8;
	};

	//参数化的替换一个字符串
	dojo.string.substitute = function(_a, _b, _c, _d) {
		_d = _d || dojo.global;
		_c = (!_c) ? function(v) {
			return v;
		} : dojo.hitch(_d, _c);
		return _a.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, function(
						_f, key, _11) {
					var _12 = dojo.getObject(key, false, _b);
					if (_11) {
						_12 = dojo.getObject(_11, false, _d).call(_d, _12, key);
					}
					return _c(_12, key).toString();
				});
	};

	//去掉字符串的空白字符
	dojo.string.trim = String.prototype.trim ? dojo.trim : function(str) {
		str = str.replace(/^\s+/, "");
		for (var i = str.length - 1; i >= 0; i--) {
			if (/\S/.test(str.charAt(i))) {
				str = str.substring(0, i + 1);
				break;
			}
		}
		return str;
	};
}

 

 

来看一下它们的用法:

 

dojo.string.pad(text: String, size: Integer, ch: String?, end: Boolean?): String

 

该方法传入四个参数:
  1. test,要被补齐的字符串
  2. size,补齐后字符串的长度
  3. ch,可选,用来补齐的字符,默认是“0”
  4. end,可选,true,在给定字符串的后面补齐"Dojo++++++",false,在前面补齐"++++++Dojo"
返回值是 String 类型,API中的例子:
// 把一个字符串用“+”在右边补全十位, 如 "Dojo++++++".
dojo.string.pad("Dojo", 10, "+", true);
 
 
dojo.string.rep(str: String, num: Integer): String
 
参数:
  1. str,要重复的字符串
  2. num,重复的次数
例子:
var rep = dojo.string.rep("Dojo", 5);
console.log("rep -- " + rep);
 
结果:DojoDojoDojoDojoDojo
 
很简单吧,继续看下一个最最常用的trim方法
 
 
dojo.string.trim(str: String): String
 
trim方法实在太常用,就不多说了,而且Dojo已经把它当作了一个最基本的方法,直接用 dojo.string.trim(str) 就好了。
 
在Dojo的API中提到这个版本的trim方法来自于Steven Levithan’s blog,在他的Blog中详细的分析了JavaScript中各个版本 trim 方法的效率, 有兴趣的可以深入研究一下。
 
 
dojo.string.substitute(template: String, map: Object|Array, transform: Function?, thisObject: Object?)
 
参数:
  1. template,模版,可以统一输出样式的字符串
  2. map,参数的map,可以是字符串,也可以是键值对,而且键值对可以嵌套使用
  3. transform,可选,被封装的一个方法,会遍历传进来的map中的字符串,然后执行相应的操作,常被用来生成模版时使用
  4. thisObject,可选,
API中的例子:
 
举例1
// returns "File 'foo.html' is not found in directory '/temp'."
dojo.string.substitute(
    "File '${0}' is not found in directory '${1}'.",
    ["foo.html","/temp"]
);
 
 
// also returns "File 'foo.html' is not found in directory '/temp'."
dojo.string.substitute(
    "File '${name}' is not found in directory '${info.dir}'.",
    { name: "foo.html", info: { dir: "/temp" } }
);
 
 
举例2
//用一个转换方法来修改 值 

// returns "file 'foo.html' is not found in directory '/temp'."
dojo.string.substitute(
    "${0} is not found in ${1}.",
    ["foo.html","/temp"],
    function(str){
        // try to figure out the type,以"/"开始就是"directory",否则就是 "file"
        var prefix = (str.charAt(0) == "/") ? "directory": "file";
        return prefix + " '" + str + "'";
    }
);
 
输出结果是:file 'foo.html' is not found in directory '/temp'. 这里的directory是通过transform方法计算得出的,通过这个例子可以理解transform方法如何使用。
 
 
举例3
use a formatter

// returns "thinger -- howdy"
dojo.string.substitute(
    "${0:postfix}", ["thinger"], null, {
        postfix: function(value, key){
            return value + " -- howdy";
        }
    }
);
 
 在模版 ${0:postfix} 中,map列表的参数只能替代0位置上占位符,而“postfix”是由第四个参数对象来处理的,在第四个参数中定义了一个方法,其中把map中的值作为参数传递进来,然后对其进行操作,这个过程稍微有些复杂,不是很容易理解,尤其是第三、第四个参数都会将map中的变量进行处理。
 
 

字符串的连接

在JavaScript中,通常使用“+”或者“+=”来连接字符串,如果字符串连接操作使用频繁,我们可以考虑通过数组的join方式来实现,这样的效率会更高。直接看代码吧
var strs = ["abc","def","ghi"];
var str = strs.join();
console.log("strs.join() -- " + str);

var sperator = "";
str = strs.join(sperator);
console.log(sperator + " -- " + str);

sperator = "123";
str = strs.join(sperator);
console.log(sperator + " -- " + str);

sperator = "+";
str = strs.join(sperator);
console.log(sperator + " -- " + str);
 

输出结果:
  • 直接使用join()方法每个数组元素之间会用“,”隔开
  • 使用join(""),每个数组元素会无缝的连接起来,通常这种方式比较实用
  • 在join()方法里面定义不同的分隔符,分隔符将被插入到各个数组元素之间
 
  • 大小: 1.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics