String如何截取字符串长度

String如何截取字符串长度20应届生面试题:使用String引用类型的时候,用过哪些方法?比如如何截取一段给定字符串的长度?答:没回答上来!(没用过截取字符串)String引用类型中有一个叫做substring的方法,这个就是用来截取字符串的。Ctrl+鼠标左键点进了substring方法内,查看到了以下源码。//小白的理解://beginIndex是起始位置,endIndex是末端位置publicStringsubstring(intbeginIndex,intendIndex){

大家好,又见面了,我是你们的朋友全栈君。

20应届生面试题:使用String引用类型的时候,用过哪些方法?比如如何截取一段给定字符串的长度?
答:没回答上来!(没用过截取字符串)

String引用类型中有一个叫做substring的方法,这个就是用来截取字符串的。
Ctrl+鼠标左键点进了substring方法内,查看到了以下源码。

  //小白的理解:
  //beginIndex是起始位置,endIndex是末端位置
  
    public String substring(int beginIndex, int endIndex) {
    
  //起始位置不能小于0  不然没有意义
  
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        
  //同理末端位置的值不能大于实际长度,超过实际长度截取没有意义
  
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        
        //实际要截取的位置,就是末端位置-起始位置的值,比如7-1=6
        //6就是截取出来的长度
        
        int subLen = endIndex - beginIndex;
        
        //当然截取长度不能是小于零的数。
        
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        
        //这里就是返回所截取长度的新的字符串了,
        //他是按照你所输入的始末位置所自定义出来的
        //其实这里没咋看懂,就知道是返回实际长度的
        //如果起点位置的值是0开始,末端位置的值是最大长度。那么就返回原字符串
        //否则按照始末位置返回一个新的你自己所定义出来的字符串
        
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }

源码里为什么一直在判断0,应该和String这个引用类型的实现原理有关,String它是一个char数组的储存结构。某种意义上也是一个数组。所以起始端按照数组里的定义,第0个元素实际上就是直观上的第一个元素。
(我是一个小白,对实现原理不懂所以只能说点自己所能理解的了)

以下是我用IDEA处于好奇,使用代码测试了一下。

        System.out.println("=======================");
        String c = "abc".substring(0,3);
        String c1 = "abc".substring(1,3);
        String c2 = "abc".substring(2,3);
        String d = "abcdf".substring(0,0);
        System.out.println(c);
        System.out.println(c1);
        System.out.println(c2);
        System.out.println(d);
        System.out.println("=======================");

在这里插入图片描述

        String d1 = "abcdf".substring(0,6);
        System.out.println(d1);

这个错误和源码里的末端值超过实际长度的异常名字一样
if (endIndex > value.length)
throw new StringIndexOutOfBoundsException(endIndex);
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144689.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharmmatplotlib装不上_pycharm没有matplotlib模块

    pycharmmatplotlib装不上_pycharm没有matplotlib模块PythonDebug经验art.js/

    2022年8月29日
    5
  • 模拟Hibernate框架的小demo

    模拟Hibernate框架的小demo

    2021年8月24日
    54
  • 水牛城66有看点不_acwing是什么

    水牛城66有看点不_acwing是什么给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。输出这个最大值。注意:数据保证至少存在一个环。输入格式第一行包含两个整数 L 和 P。接下来 L 行每行一个整数,表示 f[i]。再接下来 P 行,每行三个整数 a,b,t[i],表示点 a 和 b 之间存在一条边,边的权值为 t[i]。输出格式输出一个数表示结果,保留两位小数。数据范围2≤L≤1000,2≤P≤50

    2022年8月9日
    6
  • ssm框架过时了吗_spring实战

    ssm框架过时了吗_spring实战SpringSpring是一个开源的免费的框架Spring是一个轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)支持事务的处理,对框架整合的支持IOC理论UserDaoUserDaoImpUserSeviceUserServiceImp在之前,用户的需求可能会影响原来的代码。使用一个set。public void setUserDao(UserDao userDao){ this.userDao = userDao;}之前是主动创建对象,控制

    2022年8月8日
    4
  • 激光雷达(二)——三角测距法和TOF原理

    激光雷达(二)——三角测距法和TOF原理对于市面上的主流激光雷达,主要是用于环境探测、地图构建,按技术路线可分为:三角测距激光雷达,TOF激光雷达。三角测距激光雷达原理三角法的原理如下图所示,激光器发射激光,在照射到物体后,反射光由线性CCD接收,由于激光器和探测器间隔了一段距离,所以依照光学路径,不同距离的物体将会成像在CCD上不同的位置。按照三角公式进行计算,就能推导出被测物体的距离。CCD是ChargeCoupled…

    2022年6月2日
    70
  • SSL证书与Https应用部署小结

    SSL证书与Https应用部署小结

    2021年8月30日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号