目录
首先我们要知道,字符串的所有方法,都不会修改字符串本身(字符串是不可修改的),操作完成会返回一个新的字符串。今天我们来学一下关于字符串的一些内置函数以及我们经常会遇到的一些题目。
一、根据字符返回位置
- indexOf('要查找的字符',[起始的位置的索引号]):返回指定内容在字符串中的位置,如果找不到会返回-1,找到的话会返回该指定内容在字符串的位置的索引号。
- lastIndexOf():从后往前找,只找第一个匹配的。
好,我们来写一个小案例:
查找字符串"abcodedsodossoi"中所有o出现的位置以及次数
通过indexOf()指定开始查找的位置,从而找到所有我们想要检索的字符。
二、根据位置返回字符
- charAt(index):根据位置返回字符
由此,我们可能知道,charAt(index)可以根据位置返回字符。我们再来看一个小题目:
返回字符串中出现次数最多的字母以及次数。
var str = 'abcdeereeryhhssqqq';
var o = {};
for(var i = 0; i< str.length; i++){
var chars = str.charAt(i);
if(o[chars]){//判断o这个对象中有没有chars这个属性,有就++,没有就赋值1
o[chars]++
}else{
o[chars] = 1
}
}
//遍历
var max = 0;
var char = '';
//k是属性
//o[k]是属性值
for( var k in o){
if(o[k]>max){
max = o[k];
char = k;
}
}
console.log('最多的字符是'+char+'次数为:'+max)
- charCodeAt(index):返回相应索引号的字符ASCII值:判断用户按下了哪个键
- str(index):获取指定位置字符
三、把字符串分割成字符串数组
- stringObject.split(separator,howmany)
- separator:必需填。字符串或正则表达式,从从该参数指定的地方分割stringObject
- howmany:可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
我们写一道题目来验证一下:
判断一个字符串是否是回文,例如:str = ‘上海自来水来自海上’。
var str = '上海自来水来自上海';
var strs = str.split('').reverse().join('');
if(str == strs){
alert('是回文')
}else{
alert('不是回文')
}
我们利用split()函数,把字符串分割成了字符串数组,然后通过reverse()函数把数组反转,最后使用了jion()函数,又转换成了字符串。
最后,我们来看一下删除数字这个题目,我卡了很久,不知道大家在写的时候,有没有遇到相同的问题。
有一个字符串,需要我们把其中的数字删除,保留下字符。
<script>
var str = 'q34q2w4i1dav3';
function delNumber(str) {
var number = '123456789'
for (var i = 0; i < str.length; i++) {
var char = str.charAt(i);
if (number.indexOf(char) != -1) {
str = str.replace(char, '')
}
}
console.log(str)
}
delNumber(str)
</script>
这是我一开始的写法,但是运算结果不如意,总是会遗漏一些数字在原字符串中。后面想了很久才发现,当我们查找到需要删除的数字时,我用的是''去替换掉这个数字,这样的话,原来的“i”的索引号就会被后面的“i”取代掉,然后经过一个循环,i++,新“i”就会被遗漏掉,也就是我们总会有一些数字被遗漏在原字符串中。
想解决这个问题也很简单,我们只要在"str = str.replace(char, '')"这个语句后面 i-- 就好了。当然,我们也有其它写法。
var str = 'q34q2w4i1dav3';
var newStr = '';
for(var i=0; i<str.length; i++){
if(isNaN(str[i])){
newStr += str
}
}
console.log(newStr)
好啦,今天我们关于字符串的一些内置函数以及我们经常会遇到的一些题目就说到这里了,希望可以给大家一点点帮助。拜比~