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)
上一篇 2022年5月18日 下午11:00
下一篇 2022年5月18日 下午11:00


相关推荐

  • SSH整合JPA+Mysql

    SSH整合JPA+Mysql

    2021年9月26日
    46
  • 数据库delete语句菜鸟_MySQL视图

    数据库delete语句菜鸟_MySQL视图mysql中delete语句主要分为三个层次,下面简单介绍下1.最基础的条件删除,如下所示DELETEFROMtable_namewheretable_name.name=’dell’还有一种按序删除的方式如下DELETEFROMcustomersORDERBYNameLIMIT102.MySQLDELETE语句使用INNERJOIN子句DELETEaFROMtablenameASaLEFTJOINtemp_nameASbONa

    2025年7月3日
    5
  • mysql 联合主键_Mysql 创建联合主键[通俗易懂]

    mysql 联合主键_Mysql 创建联合主键[通俗易懂]Mysql创建联合主键2008年01月11日星期五下午5:21使用primarykey(fieldlist)比如:createtablemytable(aaint,bbchar(8),ccdate,primarykey(aa,bb));aa,bb为联合主键不知道是不是因为mysql(6.0)的版本问题,还是各版本都是这种情况,mysql中创建联合主键,联合主键列名之外…

    2022年6月16日
    36
  • 超详细Linux配置DHCP服务器

    超详细Linux配置DHCP服务器概述DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。工作原理1、客户端开机没有IP,局域网内需要发送一个广播形式的DISCOVER(局域网内不知道谁是DHCP服务器),只要能收…

    2022年5月29日
    42
  • 无人机指挥系统中标价_云睿智能无人机

    无人机指挥系统中标价_云睿智能无人机为什么大规模数字孪生很重要?Geopipe数据如何独特地使开发人员能够构建创新的空间产品?犹他大学的一个跨学科团队为无人机系统(UnmannedAerialSystems,UAS)…

    2022年8月15日
    11
  • JS数组合并(5种)[通俗易懂]

    JS数组合并(5种)[通俗易懂]前言项目过程中,经常会遇到JS数组合并的情况,时常为这个纠结。这里整理一下。简单而实用的for最容易想到的莫过于for了。会变更原数组,当然也可以写成生成新数组的形式。letarr=[1,2]letarr2=[3,4]for(letiinarr2){arr.push(arr2[i])}console.log(arr)//[1,2,3,4]arr.concat(arr2)会生成新的数组。letarr=[1,2]let

    2022年6月30日
    43

发表回复

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

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