JS字符串(字符串)

273 阅读3分钟

记忆

易混:    substring slice substr split
查找:    indexOf  charAt charCodeAt search
        concat replace 
        toLowerCase toUpperCase
es6:     for-of遍历器接口 repet  includes

常用字符串的方法发 String.prototype.方法

  1. indexOf(返回指定字符串的下标)
    let str = 'asdfsadfasdf'
    console.log(str.indexOf('a'))//0
    console.log(str.indexOf('b'))//-1
    //第二个参数代表从该下标后查找的下标
    console.log(str.indexOf('a',7))//8
    
  2. substring(返回指定的字符串,范围:[ 起始下标,结束下标 ) )
    let str = 'asdfsadfasdf'
    //不会改变原数组----截取字符串并返回
    console.log(str.substring(2))  //dfsadfasdf
    console.log(str.substring(2,5))//dfs  '[2,5)'
    
  3. slice(也是返回指定的字符串---没有自动调节)
    let str = 'asdfsadfasdf'
    console.log(str.substring(5,2));//dfs
    console.log(str.slice(5,2));// ''
    
  4. substr()(substr接收的则是起始位置和所要返回的字符串长度)
    let str = 'asdfsadfasdf'
    console.log(str.substr(0,1));//a
    console.log(str.substr(2));//dfsadfasdf
    

slice,substr和substring的区别

  相同点:都是获取指定的字符串
  不同: 当接收的参数是负数时
    slice会将它字符串的长度与对应的负数相加,结果作为参数;
    substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数;
    substring则干脆将负参数都直接转换为0。

var test = 'hello world';

alert(test.slice(-3));         //rld
alert(test.substring(-3));     //hello world
alert(test.substr(-3));        //rld

alert(test.slice(3,-4));       //lo w
alert(test.substring(3,-4));   //hel
alert(test.substr(3,-4));      //空字符串
  1. split(以指定字符分割字符串,并将分割后的字符串放入数组)

    let str = 'as/df/sd/fa'
    console.log(str.split(''));// ["a", "s", "/", "d", "f", "/", "s", "d", "/", "f", "a"]
    console.log(str.split('/'));//["as", "df", "sd", "fa"]
    
  2. concat (将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回)

    MDN 性能:强烈建议使用 赋值操作符(+, +=)代替 concat 方法
    let a = 'abc'
    let b = 'defg'
    console.log(a.concat(b));//'abcdefg'
    console.log(a+b);//'abcdefg'
    
  3. replace(替换值, 新值) (替换字符串,第一个值可以是正则,第二个值可以是函数)

    let str = '8a78fhasi238f32h'
    console.log(str.replace(/[0-9]/g,"?"));//?a??fhasi???f??h
    
  4. charCodeAt()字符的ASCII编码

    'a'.charCodeAt() // =>97
    'z'.charCodeAt() //=>122
    
    'A'.charCodeAt() //=>65
    'Z'.charCodeAt() //=>90
    
    '可以通过编码判断字母的大小写  
    65-90 大写字母A-Z
    97-122小写字母a-z
    '
    
  5. charAt(index)方法返回指定位置的字符

    let str = '8a78fhasi238f32h'
    console.log(str.charAt(1))//a
    
    
  6. toLowerCase() 大写字母转小写 --- toUpperCase() 小写字母转大写

  7. search(方法执行正则表达式和 String 对象之间的一个搜索匹配)

    语法 str.search(regexp)

    用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1
    

es6新增方法

  1. 遍历器接口 for-of
    for (let k of 'foo') {
       console.log(k)
     }
     // "f"
     // "o"
     // "o"
    
    let s = 'qewr'
    s[1] //'q'
    s[2] //'e'
    
  2. repet(方法返回一个新字符串,表示将原字符串重复n次)
    'x'.repeat(3) // "xxx"
    'hello'.repeat(2) // "hellohello"
    'na'.repeat(0) // ""    
    
  3. includes
    let s = 'hello word'
    s.includes('o') // true
    

  1. 字符串去重,并除掉特殊字符按照数字在前字母在后的顺序排列字符串

    let str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs'; 输出结果 12345fdsarg

    思路
    //1.字符串去重--创建新的变量接收无重复的字符串-利用indexOf找不到值返回-1,来添加到新的空字符串中
    //2.去除特殊字符
    //3.排序 -- 区别字母和数组--最后拼接
    
    let str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs';
    //1.字符串去重(老方法)
    // let newStr = ''
    // for(let i=0;i<str.length;i++){
    //     let s = str[i]
    //     if(newStr.indexOf(s) == -1){ //返回指定字符串的下标
    //         newStr += str[i]
    //     }
    // }
    // console.log(newStr);//123fd&4sa5rg
    
    let newStr = ''
    for(let k of str){ //字符串新增遍历器接口
        if(newStr.indexOf(k) == -1){
            newStr += k
        }
    } 
    // console.log(newStr);//123fd&4sa5rg
    
    //2.去除特殊字符
    let w = newStr.replace('&','')
    // console.log(w);//123fd4sa5rg
    
    //3. 排序
    let number = ''
    let letter = ''
    for(let k of w){
        if(k.charCodeAt()>=49 && k.charCodeAt()<=57){
            number += k
        }else{
            letter += k
        }
    }
    let res = number + letter
    console.log(res)