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


相关推荐

  • vue遍历数组对象foreach_js遍历对象数组

    vue遍历数组对象foreach_js遍历对象数组Arr=[ { a:1 }, { b:2 },]<liv-for=”(value,key,index)inArr”><divv-for=”(txvalue,name,num)invalue”> <spanclass=”title”>{{name}}:</span><span>{{txvalue}}</span> </div>&lt

    2022年8月30日
    0
  • MD5 编码 转换

    MD5 编码 转换

    2021年5月9日
    221
  • 千万级敏感词过滤设计

    千万级敏感词过滤设计需求分析系统有千万级的禁词需要去过滤当中包含人名特殊符号组成的语句网址单字组合成的敏感词等等初步设计 1.解决千万级禁词存储及查找问题 2.解决被过滤文本内容过多问题详细设计 1.采用ES作为禁词库千万级数据检索时间在毫秒级满足需求 2.不适用分词器需要完整匹配分词后很多词都是合法的组合之后才是敏感词 3.被过滤文本内容分词不完整利用IK分词器分词结果不适合现…

    2022年5月30日
    42
  • nginx根据url转发_nginx根据域名转发原理

    nginx根据url转发_nginx根据域名转发原理环境:centos:CentOSLinuxrelease7.6.1810(Core)nginx:1.15.8场景:在/home/centos/www下放有我们的项目,目前只能通过https://xxx.com/xxx访问项目,而我们想通过https://xxx.com/就能访问我们的项目。nginx配置如下:location/xxx{root/home/cen…

    2022年10月19日
    2
  • 从box-sizing:border-box属性入手,来了解盒模型

    从box-sizing:border-box属性入手,来了解盒模型从最开始学习CSS的时候,就了解了盒模型的概念,今天,我们从其中的box-sizing:border-box;的属性入手,来重新认识一下盒模型在实际项目中的运用。背景:先声明一下运用的场景,假如项目布局使用的是自适应的布局方式,div给出的宽度是百分比的形式,即框占窗口宽度的50%,但边界和内边距是用像素来表示的怎么办?为了避免这种问题,可以使用属性box-sizing来调整框…

    2022年4月29日
    48
  • kubernetes部署微服务_kubernetes离线安装

    kubernetes部署微服务_kubernetes离线安装微服务之容器化技术—kubernetes的安装

    2022年4月20日
    51

发表回复

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

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