zoukankan      html  css  js  c++  java
  • String 中 slice、substring、substr 的使用方法

    区别

    slice

    截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

    若参数为负数,需要从尾部位置倒数 负数参数长度 作为生效位置

    start 大于 end ,则返回空字符串

    start 大于字符串长度,返回空字符串

    substring

    截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

    不支持负数,若有负数,将会重置为 0

    start 大于 end ,会将两者位置对调

    start 大于字符串长度,返回空字符串

    substr

    截取从 start 位置开始, 截取长度为 length返回一个新字符串

    start 为负数,需要从尾部位置倒数 start长度 作为生效位置

    length 不支持负数,若 length 为负数,会被重置成 0,将返回空字符串

    start 大于字符串长度,返回空字符串

    备注:ECMAscript 没有对该方法进行标准化,因此反对使用它


    一、slice

    使用语法

    s.slice(start, end)
    

    说明

    截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

    若参数为负数,需要从尾部位置倒数 负数参数长度 作为生效位置

    start 大于 end ,则返回空字符串

    start 大于字符串长度,返回空字符串

    例子

    let s = '12345678'
    

    应用场景

    1. 没有参数, 从 0 开始到结束位置进行截取
    s.slice()  // s = '12345678'  --->  '12345678'
    
    2. 一个参数
    2.1 
        正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
        s.slice(0)  // s = '12345678'  --->  '12345678'
        s.slice(1)  // s = '12345678'  --->  '2345678'
        s.slice(10)  // s = '12345678'  --->  ''
    
    2.2 
        负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
        (可将负数参数与字符串长度相加即可得到生效数值)
        s.slice(-2)  // s.slice(6) ---> s = '12345678'  --->  '78'
    
    3. 两个参数
    3.1 
        正数:从 start 开始到 end 位置进行截取
        s.slice(1, 2)  // s = '12345678'  --->  '2'
    
    3.2 
        负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
        (可将负数参数与字符串长度相加即可得到生效数值)
        s.slice(5, -1)  // s.slice(5, 7) ---> s = '12345678'  --->  '67'
        s.slice(-2, -1)  // s.slice(6, 7) ---> s = '12345678'  --->  '7'
        s.slice(-1, -2)  // s.slice(7, 6) ---> s = '12345678'  --->  ''
    

    二、substring

    使用语法

    s.substring(start, end)
    

    说明

    截取从 start 位置开始, end 位置结束(不包含 end) 的字符串,返回一个新字符串

    不支持负数,若有负数,将会重置为 0

    start 大于 end ,会将两者位置对调

    start 大于字符串长度,返回空字符串

    例子

    let s = '12345678'
    

    应用场景

    1. 没有参数, 从 0 开始到结束位置进行截取
    s.substring()  // s = '12345678'  --->  '12345678'
    
    2. 一个参数
    2.1
        正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
        s.substring(0)  // s = '12345678'  --->  '12345678'
        s.substring(1)  // s = '12345678'  --->  '2345678'
        s.substring(10)  // s = '12345678'  --->  ''
    
    2.2
        负数:若参数为负数,重置为 0
        s.substring(-2)  // s.substring(0) ---> s = '12345678'  --->  '12345678'
    
    3. 两个参数
    3.1
        正数:从 start 开始到 end 位置进行截取
        start 若比 end 大,将会将两者位置对调 
        s.substring(1, 2)  // s = '12345678'  --->  '2'
        s.substring(2, 1)  // s.substring(1, 2) ---> s = '12345678'  --->  '2'
    
    3.2
        负数:若参数为负数,重置为 0
        start 若比 end 大,将会将两者位置对调 
        s.substring(5, -1)  // s.substring(5, 0) ---> s.substring(0, 5) ---> s = '12345678'  --->  '12345'
        s.substring(-2, -1)  // s.substring(0, 0) ---> s = '12345678'  --->  '0'
    

    三、substr

    使用语法

    s.substr(start, length)
    

    说明

    截取从 start 位置开始, 截取长度为 length返回一个新字符串

    start 为负数,需要从尾部位置倒数 start长度 作为生效位置

    length 不支持负数,若 length 为负数,会被重置成 0,将返回空字符串

    start 大于字符串长度,返回空字符串

    例子

    let s = '12345678'
    

    应用场景

    1. 没有参数, 从 0 开始到结束位置进行截取
    s.substr()  // s = '12345678'  --->  '12345678'
    
    2. 一个参数
    2.1
        正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
        s.substr(0)  // s = '12345678'  --->  '12345678'
        s.substr(1)  // s = '12345678'  --->  '2345678'
        s.substr(10)  // s = '12345678'  --->  ''
    
    2.2
        负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
        (可将 start 与字符串长度相加即可得到生效数值)
        s.substr(-2)  // s.substr(6) ---> s = '12345678'  --->  '78'
    
    3. 两个参数
    3.1
        正数:从 start 开始,截取长度为 length
        s.substr(1, 2)  // s = '12345678'  --->  '23'
        s.substr(2, 1)  // s = '12345678'  --->  '3'
    
    3.2
        负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
        (可将 start 与字符串长度相加即可得到生效数值)
        若 length 为负数,会被重置成 0,将返回空字符串
        s.substr(5, -1)  // s.substr(5, 0) ---> s = '12345678'  --->  ''
        s.substr(-2, 1)  // s.substr(6, 1) ---> s = '12345678'  --->  '7'
    
    都读到最后了、留下个建议如何
  • 相关阅读:
    Educational Codeforces Round 58 A,B,C,D,E,G
    Codeforces Round #530 (Div. 2) F (树形dp+线段树)
    Codeforces Round #530 (Div. 2) A,B,C,D
    bzoj 3262: 陌上花开
    bzoj 2653: middle (主席树+二分)
    费马小定理的证明
    分组背包
    二维费用的背包问题
    luoguP1164 小A点菜(背包问题)
    完全背包问题
  • 原文地址:https://www.cnblogs.com/linjunfu/p/12523817.html
Copyright © 2011-2022 走看看