String类的substring方法

Posted 博学善思

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String类的substring方法相关的知识,希望对你有一定的参考价值。

下列程序的输出是什么?

class A { public static void main(String[] a) {
    String v = “base”;      v.concat(“ball”);
    v.substring(1,5);       System.out.println(v);  }
}

分析:由于String是不可变的,当执行v.concat("ball")时,v本身还是指向“base”,当再执行v.substring(1,5)时,会报出界异常

 

如下为concat的源码:可以看到,最后返回的是新的字符串

public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
    }

如下是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);
}

 

以上是关于String类的substring方法的主要内容,如果未能解决你的问题,请参考以下文章

java-String类的获取方法(indexOf();substring()等)

String类的subString(a,b)方法(基于jdk 1.9)

8String 类的常用方法都有那些?

String类的subString()

java语言:String类的concat方法与StringBuffer类的append方法区别?内存状态?

常用类的运用(String)