字符串处理中substring()和substr()的比较

javascript

stringObject.substring(start[,stop])

用于提取字符串中介于两个指定下标之间的字符。返回一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。

var str = 'abcdefg';
var str2 = str.substring(2,4);//下标从0开始,返回的字符串长度为:4-2,返回结果:cd
var str3 = str.substring(4,2);//返回结果:cd,与str2相同,返回前交换了start和end的值
var str4 = str.substring(2);//返回结果:cdefg
var str5 = str.substring(-2);//返回:abcdefg
1. 不能接受负的参数,直接返回了整个字符串。
2. 返回的子串包括 start 处的字符,但不包括 stop 处的字符。
3. 如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数,如str3。
4. 如果没有stop参数,返回结果从下标start到字符串结束。

stringObject.substr(start[,len])

在字符串中抽取从 star下标开始的指定len长度的字符。返回一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 len 个字符。如果没有指定 len,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

var str = 'abcdefg';
var str2 = str.substr(2,4);//下标从0开始,返回的字符串长度为:4,返回结果:cdef
var str3 = str.substr(4,2);//返回的字符串长度为:2,返回结果:ef
var str4 = str.substr(2);//返回结果:cdefg
var str5 = str.substr(-2);//返回结果:fg
var str6 = str.substr(-2,10);//要返回的长度是10,但返回结果:fg
var str7 = str.substr(-2,-10);//要返回的长度是-10,返回空字符串
1. 要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
2. 重要事项:ECMAscript 没有对该方法进行标准化,**因此反对使用它**。在某些浏览器中start下标使用负值,直接返回了全部字符串。

substring()和substr()只有在参数为一个正数时,取得的效果才相同。

mysql

mysql中的substring()和substr()无区别。

说明substring()substr()
从pos开始到字符串结束substring(str,pos)substr(str,pos)
从pos开始到字符串结束substring(str FROM pos)substring(str FROM pos)
从pos开始取len个字符substring(str,pos,len)substr(str,pos,len)
从pos开始取len个字符substring(str FROM pos FOR len)substr(str FROM pos FOR len)

1. 字符串下标pos从1开始。
2. pos可设置为负数,同js的substr()。
3. 如果没有取得结果,返回空字符串。

java

java.lang.String类中只有substring()方法。

public String substring(int beginIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    int subLen = value.length - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    if (endIndex > value.length) {
        throw new StringIndexOutOfBoundsException(endIndex);
    }
    int subLen = endIndex - beginIndex;
    if (subLen < 0) {
        throw new StringIndexOutOfBoundsException(subLen);
    }
    return ((beginIndex == 0) && (endIndex == value.length)) ? this
            : new String(value, beginIndex, subLen);
}
1. beginIndex小于0会抛出StringIndexOutOfBoundsException异常
2. beginIndex大于字符串长度会抛出StringIndexOutOfBoundsException异常
3. endIndex大于字符串长度会抛出StringIndexOutOfBoundsException异常
4. 要得取的字符串长度小于0,会抛出StringIndexOutOfBoundsException异常

StringUtils

特指org.apache.commons.lang3.StringUtils类

StringUtils里的substring()方法要灵活的多,也不需要考虑异常的抛出问题

public static String substring(String str, int start){
    ...
}

public static String substring(String str, int start, int end) {
...
}
1. start下标可以为负数,效果和js的substr()相同。
2. end下标也可以为负数,这是独有的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值