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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简述django请求生命周期_django批量更新数据库

    简述django请求生命周期_django批量更新数据库Django请求生命周期分析1.客户端发送请求在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都

    2022年8月7日
    5
  • 使用idea进行activiti工作流开发[通俗易懂]

    使用idea进行activiti工作流开发[通俗易懂]使用idea进行activiti工作流开发emmm…….因为工作需要,所以要学习activiti工作流,初次学习,写个博客记录一下,下次再用就知道大概流程了。1、安装插件在idea里面,activiti的插件叫actiBPM,在插件库里面把它安装好,重启idea就行了。2、新建一个maven项目,并更改pom.xml。pom中依赖如下:&lt;dependen…

    2022年10月5日
    1
  • 到底什么是hash呢?hash碰撞?为什么HashMap的初始容量是16?

    到底什么是hash呢?hash碰撞?为什么HashMap的初始容量是16?一,到底什么是hash呢?作者:知乎用户链接:https://www.zhihu.com/question/26762707/answer/40119521来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。hash(散列、杂凑)函数,是将任意长度的数据映射到有限长度的域上。直观解释起来,就是对一串数据m进行杂糅,输出另一段固定长度的数据h,作为这段数据的…

    2022年6月16日
    38
  • 用WijmoJS玩转您的Web应用 —— Ionic

    用WijmoJS玩转您的Web应用 —— Ionic

    2021年6月7日
    108
  • 向量三重积的几何意义_向量三重积

    向量三重积的几何意义_向量三重积定义同一个线性空间可定义不同的内积。选择复线性空间上的内积实内积空间性质向量长度向量长度性质Cauchy-Schwartz不等式Cauchy-Schwartz不等式推论度量矩阵只要告诉一组基下任意两个向量的内积,就会形成一个度量矩阵。那么随便拿一个向量,都知道它的坐标,这两个向量的内积就是右边的xTGyx^TGyxTGy。如果GGG为单位矩阵,那么<a,b><a,b><a,b>内积就等于他们坐标的内积。G为单位矩阵

    2022年8月30日
    1
  • 用户画像总结

    用户画像总结        最近在工作之余,结合自己的理解和论坛上的一些帖子,整理了份用户画像的文章,个人觉得这篇文章在宏观上很好地描述了用户画像的主要内容。(文章内的图片来源于不同帖子,权当分享,侵删)一、什么是用户画像        用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。通俗说就是给用户打标签,而标签是通过对用户信息分析而来的高度精炼的特征标识。通过打…

    2022年7月18日
    20

发表回复

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

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