URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例 1:
输入:"Mr John Smith ", 13
输出:“Mr%20John%20Smith”
示例 2:
输入:" “, 5
输出:”%20%20%20%20%20"
提示:
字符串长度在 [0, 500000] 范围内。
方法一:replaceAll
/**
* @param {string} S
* @param {number} length
* @return {string}
*/
var replaceSpaces = function(S, length) {
return S.slice(0,length).replaceAll(' ','%20');
};
- String.slice(start,end)
slice()返回一个子片段,对原先的string没有影响,与subString的区别是,还可以用负数当参数,相当于是length+start,length+end.
eg:
var s = "abcdefg";
s.slice(0,4) // "abcd"
s.slice(2,4) // "cd"
s.slice(4) // "efg"
s.slice(3,-1) // "def"
s.slice(3,-2) // "de"
s.slice(-3,-1) // "ef"
- Array.slice(start,end)
eg:
var a = [1,2,3,4,5];
a.slice(0,3); // [1,2,3]
a.slice(3); // [4,5]
a.slice(1,-1); // [2,3,4]
a.slice(-3,-2); // [3]
- String.replaceAll(substr,substr)
方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,该函数会替换所有匹配到的子字符串。
该方法不会改变原始字符串。
方法二:encodeURI(uri)
encodeURI() 函数可把字符串作为 URI 进行编码。
对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的: , / ? : @ & = + $ # (可以使用 encodeURIComponent() 方法分别对特殊含义的 ASCII 标点符号进行编码。).
参数值:uri 必需。要编码的 URI。
返回值: 字符串,表示编码后的 URI。
提示:使用 decodeURI() 方法可以解码URI(通用资源标识符:UniformResourceIdentifier,简称"URI")。
-----菜鸟教程
/**
* @param {string} S
* @param {number} length
* @return {string}
*/
var replaceSpaces = function(S, length) {
return encodeURI(S.substring(0,length));
};
对字符串限长后使用
方法三:利用split将字符串分隔成数组,再用join将数组拼接,并返回字符串
先分隔再加入
var replaceSpaces = function(S, length) {
return S.substr(0, length).split(' ').join('%20')
};
- substr(start,length)
方法可在字符串中抽取从 start 下标开始的指定数目的字符。
length参数可以省略,省略则默认为字符串长度
- split(string)
split() 方法用于把一个字符串分割成字符串数组。
提示: 如果把空字符串 (“”) 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
注意: split() 方法不改变原始字符串。
- join()
join() 方法将数组作为字符串返回。
元素将由指定的分隔符分隔。默认分隔符是逗号 (,)。
注释:join() 方法不会改变原始数组。
方法四:正则表达式
先放代码
var replaceSpaces = function(S, length) {
return S.substr(0, length).replace(/\s/g, '%20')
};
1.”/ /”这个是固定写法,
2.”\s”是转移符号用以匹配任何空白字符,包括空格、制表符、换页符等等
3.”g”表示全局匹配将替换所有匹配的子串,如果不加”g”当匹配到第一个后就结束了