关于String的源代码分析

 

String:
String是一个封装了char[]数组以实现字符串功能的类,
其中包括:length(),isEmpty(),charAt(int index),,

//value为封装的char[]数组

字符串长度:
    int length():
        //通过value.length计算长度后返回
        
字符串非空:
    boolean isEmpty():
        //通过value.length==0进行判断,无非空判断所以null会报错
        
获取index索引的char:
    char charAt(int index):
        //通过返回value[index]实现,有越界判断,参数越界会返回StringIndexOutOfBoundsException异常
        
获取index索引的char的编码:
    int codePointAt(int index):
        //有越界判断,调用Character类的codePointAtImpl(value, index, value.length)方法实现
        //(int)str.charAt(index)也可实现
        
截取字符串添加到char[]数组中:
    void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin):
        //调用System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin)方法实现
        //System.arraycopy()如果存在类型不同则报错,报错开始不继续储存数据
        //截取value索引srcBegin起后srcEnd - srcBegin位的char[]数组赋值给dst

判断两个字符串的值是否相同:
    boolean equals(Object anObject):
        //如果地址相同则返回true
        //判断anObject是否为String类型
        //判断长度是否相同
        //循环判断每个字符是否相等
        //否则返回false
        
查找字符,返回索引:
    int indexOf(int ch, int fromIndex):
        //ch为char的编码
        //fromIndex为从第几位开始
        //fromIndex如果小于0则赋值为0,如果大于字符串长度则返回异常
        //循环比对,有返回索引,没有返回-1
        
从后查找字符,返回索引:
    int lastIndexOf(int ch, int fromIndex):
        //反向循环获取索引

通过索引截取字符串:
    String substring(int beginIndex, int endIndex):
        //判断beginIndex和endIndex是否越界,如果越界返回StringIndexOutOfBoundsException异常
        //返回一个新String对象 new String(value, beginIndex, endIndex-beginIndex);

连接字符串:
源代码:
 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);
    }
 void getChars(char dst[], int dstBegin) {
        System.arraycopy(value, 0, dst, dstBegin, value.length);
    }
    String concat(String str):
        //通过Arrays.copuOf(value,value.length+str.length())
        //创建一个长度为两个字符串长度总和,并且前value.length位//本对象长度
        是value数据的char[]数组
        //然后调用str.getChars(char dst[], int dstBegin);方法从dstBegin索引开始拷贝str的value到dst
        //最后返回new String(buf, true);
        
替换字符:
    String replace(char oldChar, char newChar):
        //判断oldChar不等于newChar
        //循环比对字符,保留当前索引
        //创建一个长度为原字符串长度的char数组
        //循环赋值,如果等于保留索引则赋newChar值
        //返回参数为char[]的构造方法
        1)replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
        2)replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
        
根据分隔符分割字符串成数组
    split(String regex, int limit):
        //判断regex长度等于1和不在特殊符号中或者regex长度为2,第一位为转义符\\,第二位不能是数字,字母,和高低位代理
        //循环判断如果有分隔符则分割加入ArrayList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值