按照惯例,每天一道算法题。今天遇到的是这样:
使用给定的参数对句子执行一次查找和替换,然后返回新句子。
第一个参数是将要对其执行查找和替换的句子。
第二个参数是将被替换掉的单词(替换前的单词)。
第三个参数用于替换第二个参数(替换后的单词)。
注意:替换时保持原单词的大小写。例如,如果你想用单词 "dog" 替换单词 "Book" ,你应该替换成 "Dog".
不得不说的一点是,玩JavaScript的算法题,你不会str.split()和arr.join()方法,那几乎是没法玩的。虽然在实际生产中这些原生方法不见得有太大用途。
1. split()
先来看看W3C上的文档介绍:
定义和用法
split() 方法用于把一个字符串分割成字符串数组。
语法
stringObject.split(separator,howmany)
参数 | 描述 |
---|---|
separator | 必需。字符串或正则表达式,从该参数指定的地方分割 stringObject。 |
howmany | 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。 |
然而,这并不是重点,重点是:
注释:如果把空字符串
("") 用作 separator,那么
stringObject 中的每个字符之间都会被分割。
没错,结合基本用法和特殊用法,我们就可以使用:
str.split(" ")——把一个句子或段落按空格分割成一个个单词的数组,再依靠
str.split("")——把每个单词分割成一个个字母。
2. join()
国际惯例看文档:
定义和用法
join() 方法用于把数组中的所有元素放入一个字符串。
元素是通过指定的分隔符进行分隔的。
语法
arrayObject.join(separator)
参数 | 描述 |
---|---|
separator | 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。 |
返回值
返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。
好了,这你就知道了,当你用arr.join("")时,就可以将数组恢复成字符串形式。
也就是说:
split()与join()方法是完全相反的,借由两个方法可以实现字符串和数组之间的自由操作。
function myReplace(str, before, after) {
str = str.split(" ");
var bef = before.split("");
var aft = after.split("");
if (bef[0].match(/[A-Z]/)!==null){
aft[0] = aft[0].toUpperCase();
after = aft.join("");
}
for(var i = 0; i<str.length; i++){
if(str[i] === before){
str[i] = after;
}
}
str = str.join(" ");
return str;
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");