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


相关推荐

  • 像素,分辨率,PPI(像素密度),BPP 扫盲

    像素,分辨率,PPI(像素密度),BPP 扫盲像素于分辨率像素,又称画素,为图像显示的基本单位,译自英文“pixel”,pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel,故“像素”表示“图像元素”之意,有时亦被称为pel(picture element)。每个这样的信息元素不是一个点或者一个方块,而是一个抽象的采样。仔细处理的话,一幅图像中的像素可以在任何尺度上看起来都不像分离的点或者方块;但…

    2022年5月11日
    42
  • qt tcpsocket_qt的socket通信

    qt tcpsocket_qt的socket通信QTcpSocket类的方法connectToHost会泄露内存,即使把调用这个方法的QTcpSocket实例delete掉,内存也不会释放!反复connectToHost会导致段错误,十分危险。必须控制connectToHost的使用次数!连接服务器m_tcpSocket->connectToHost(“127.0.0.1”,9877);connected=m_tcpSocket-

    2022年9月10日
    0
  • 数据建模之ODS层命名规范及质量规范

    数据建模之ODS层命名规范及质量规范命名规范表命名规范表命名规则:{层次}{源系统表名}{保留位/delta与否}。 增量数据:ods_{库名}_{表名}_{id}。 全量数据:ods_{库名}_{表名}。 ODSETL过程的临时表:tmp_{临时表所在过程的输出表}_{从0开始的序号}。 按小时同步的增量表:ods_{库名}_{表名}_{ih}。 按小时同步的全量表:ods_{库名}_{表名}_{hh}。 ps:如果库名可能重复,可使用编码来代替库名字段命名规范 字段默认使用源系统的字段名。 字段名与.

    2022年9月1日
    2
  • 如何查看tomcat版本_tomcat修改端口号

    如何查看tomcat版本_tomcat修改端口号一、通过tomcat版本文件查看  找到tomcat目录,进入”xxx/tomcat/bin”目录,执行”shversion.sh”。如果没有设置JAVA_HOME和JRE_HOME环境变量则会报如下错误:[jieyu.ljy@tripco011182064160.na62xxx/tomcat/bin]$shversion.shNeithertheJAVA_HOMEn…

    2022年9月1日
    3
  • 编码解码乱码字符集[通俗易懂]

    编码解码乱码字符集[通俗易懂]编码EnCode:将字符转化为字节解码DeCode:将字节转化为字符乱码:打个比方—比较多人知道的联通用字符集GBK的时候出现这样的情况:��ͨ,这就是乱码常见的中文字符集有:GBK和UTF-8国际上常用的字符集:Unicode(大字典)、ANSI UTF-8,中文占三个字节,英文占一个字节(变长),还有定长占两个字节(耗费空间多)GBK,中文占两个zijie…

    2022年5月30日
    38
  • Mac(OSX)下媲美XShell的神器Termius「建议收藏」

    Mac(OSX)下媲美XShell的神器Termius「建议收藏」文章目录简介特点软件环境配置配置项配置密钥配置说明配置主机配置项简介XShell的大名不用多说,称它为Windows平台最好用的远程终端不为过吧。唯一不足的地方就是它只有Windows版本。所以今天跟大家介绍一款全平台的远程终端——Termius。Termius不仅涵盖了Windows、Linux、OSX,还变态得支持Android和iOS(以后在地铁、公交上都可以随时拿出手机来排查线上问题啦…………

    2022年7月20日
    22

发表回复

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

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