字符串

66 阅读2分钟

字符串删除方法

  1. slice()和substring()第二次参数指定的是字符串最后一个字符后面的位置;
  2. substr()第二个参数指定返回的字符串个数;

情景模式-参数为正数

   var string = 'hello world';
   console.log(string.slice(3));  //lo world
   console.log(string.substring(3));  //lo world
   console.log(string.substr(3));  //lo world
   console.log(string.slice(3, 7));  //lo w
   console.log(string.substring(3, 7)); //lo w
   console.log(string.substr(3, 7)); //lo worl

情景模式-参数为负数

  1. slice() 会将所有的负数于字符串的长度相加
  2. substr() 会将第一个负参数与字符串长度相加,第二个负参数转化为 0
  3. substring() 将所有的负参数转化为 0
   var string = 'hello world';  // length = 11
    console.log(string.slice(-3));  // rld    slice(8)
    console.log(string.substring(-3));  //hello world  substring(0)
    console.log(string.substr(-3));  // rld  substr(8)
    console.log(string.slice(3, -4));  //lo w slice(3, 7)
    console.log(string.substring(3, -4)); //hel   substring(3, 0)
    console.log(string.substr(3, -4)); //  ''   substring(3, 0)

正则

参考
/^[+-]?\d+/g

正则由四部分组成

  • 元字符,表示匹配内容,. 查找单个字符,\w 字母数字下划线,\d 数字, \s 空白字符, \b 匹配边界
  • 量词,表示数量,写在需要匹配的元字符后面如 \d+,+就表示匹配\d的数量
  • 量词符号:+ 至少一个, *零个或多个,?零个或一个, {}:{3}匹配三个、{1,3}1-3个,{1,}1-多个
  • 括号,[ ]或 [0-9] 0到9中任意字符 [^0-9] 除了0-9其他字符; ()分组 在使用match()时可以获取分组中的内容
  • 模式修正符,//g,写在后面,i 不区分大小写, g 匹配多个, m 换行也继续匹配

api

  • part.test(text) 匹配到就返回true, part: 匹配规则, test:待匹配字符串
  • text.match(part) 返回匹配到的内容

替换空格

剑指替换空格

image.png

function replaceSpace( s ) {
    // write code here
    return  s.split(" ").join("%20")
}

只出现一次字符的位置

剑指 image.png

  • 统计字符的问题可以使用对象的数据结构进行统计
  • 然后再通过数组当作key值访问对象,当发现第一个为1时就是答案
function FirstNotRepeatingChar(str)
{
    // write code here
    let arr = str.split('')
    let res = {}
    for(let i = 0; i < arr.length; i++) {
        if(res[arr[i]]){
            res[arr[i]] = res[arr[i]] + 1
        }else {
            res[arr[i]] = 1
        }
    }
    for(let i = 0; i < arr.length; i++) {
        if(res[arr[i]] == 1) {
            return i
        }
    }
    return -1
}

左旋转字符串

剑指 image.png str.slice(0,n)截取字符串

function LeftRotateString(str, n)
{
    // write code here
    if(!str) return ""
    return str.slice(n,str.lenght) + str.slice(0,n)
}

翻转单词序列

剑指

image.png

function ReverseSentence(str)
{
    // 法一调用库
    let arr = str.split(" ")
    return arr.reverse().join(" ")
    
    // 2. 实现库函数方法,trim()为去掉头尾空白符
    const reverse = a => {
        // 两端指针实现 数组项翻转
        const swap = (a, i, j) => [a[i], a[j]] = [a[j], a[i]]
        let l = 0, r = a.length - 1
        while (l < r) swap(a, l++, r--)
        return a
    }

    return reverse(str.trim().split(/\s+/)).join(' ') 
  
};
}

剑指 Offer 67. 把字符串转换成整数

剑指 Offer 67. 把字符串转换成整数 image.png

  • x**n  相当于 Math.pow(x,n)  即x的n次方 一个*是乘  两个*就是乘方
  • 正则/^[+-]?\d+/表示开头是+或-,?出现0-1次,\d+数字至少匹配一个
  • str.trim() 去掉字符串前后空格
var strToInt = function(str) {
    const num = str.trim().match(/^[+-]?\d+/)
    if(!num) return 0
    let INT_MAX = (2**31) - 1
    let INT_MIN = - (2**31)
    return num >= INT_MAX ? INT_MAX : num <= INT_MIN ? INT_MIN : num
};

表示数值的字符串

剑指 正则表达式

function isNumeric( str ) {
    // write code here
    str = str.trim()
    let exp = /^[+-]?(\d+(\.\d*)?|(\.\d+))([eE][+-]?\d+)?$/
    return exp.test(str)
}
module.exports = {
    isNumeric : isNumeric
};