写在前面: 视频是什么东西,有看文档精彩吗? 视频是什么东西,有看文档速度快吗? 视频是什么东西,有看文档效率高吗? 诸小亮:接下来我们就需要学习String 张小飞:这不就是字符串么,前面也用过几次,还需要单独讲? 诸小亮:当然了,String在工作中使用的最频繁了,属于重点内容 1。介绍 诸小亮:你现在对String了解多少? 张小飞:在Java中只要是以括起来的都是字符串,比如:a、你好啊、abc、亚瑟、lakj 诸小亮:不错,String就是Java中描述字符串的类,之前我们定义的Person类,只是用了一些基本数据类型,像:height、weight、age等 但还有很多属性是无法用基本数据类型来表示的,比如:姓名、地址、座右铭等 姓名、地址这些就用String? 是的,比如:classHero{Stringname;一个人的名字应该是String类型Stringaddress;地址应该是String类型}publicstaticvoidmain(String〔〕args){定义一个字符串StringheroName亚瑟;}2。常用方法 张小飞:String既然是一个类,它里面肯定有很多方法吧 诸小亮:不错,其实学习字符串,主要是会使用它的常用方法 张小飞:都有哪些方法呢? 诸小亮:我整理了一些,你看看吧1。length length():获取字符串长度,比如:publicstaticvoidmain(String〔〕args)throwsException{Stringstrabcd;intlengthstr。length();System。out。println(length);输出4}2。chatAt chatAt():获取指定下标的字符(下标从0开始),比如: 张小飞:这应该输出最后一个字母‘d’吧 诸小亮:是的 张小飞:如果指定的下标不存在呢? 诸小亮:那就会报错了,比如:str。charAt(10),字符串中是不存在10这个下标的,结果: 张小飞:原来如此 3。indexOf indexOf:获取指定字符,在字符串中第一次出现的位置,比如: 结果:省略 如果字符串中不存在指定字符,返回1,比如: 结果: 也可以获取某个子串第一次出现的位置,找不到同样返回1,比如: 结果: 还可以,从指定位置查找子串: 结果: 4。lastIndexOf lastIndexOf:获取指定字符,最后一次出现的位置,找不到返回1publicstaticvoidmain(String〔〕args)throwsException{Stringstrabcdeeeeecd;System。out。println(str。lastIndexOf(cd));System。out。println(str。lastIndexOf(ef));} 结果: 5。contains contains:判断是否包含指定子串 结果: 6。startsWith startsWith:判断是否以指定子串开头 结果: 7。endsWith endsWith:判断是否以指定子串结尾 结果: 8。isEmpty isEmpty:判断是否是空字符串,其实就是看字符串的长度是不是0,其源码: 9。trim trim:去除字符串两端的空格,比如: 结果: 10。strip strip:同样也是去除字符串两端的空格 张小飞:strip跟trim有什么不同呢 诸小亮:输入法有全角、半角,你知道吧 张小飞:这个了解 诸小亮:trim只能去除半角的空格,而strip都可去除,比如: 结果: 注意:一般情况下都是用半角,所以用trim方法足够了11。split split:对字符串进行切割,返回一个字符串数组,比如:publicstaticvoidmain(String〔〕args)throwsException{Stringstr亚瑟,18,3个技能;根据‘,’对字符串进行切割,返回一个字符串数组String〔〕splitstr。split(,);System。out。println(split〔0〕split〔1〕split〔2〕);} 结果: 12。replace replace:替换字符串中的某些字符,比如: 结果 13。toLowerCase toLowerCase:把字符串中的大写字母替换成小写字母 结果: 14。toUpperCase toUpperCase:把字符串中的小写字母替换成大写字母 结果: 15。substring substring:获取指定下标范围的子串 结果: 注意:包含头下标4,不包含尾下标6 也可以只指定一个下标,比如: 结果: 16。toCharArray toCharArray:把字符串转换成字符数组 结果: 17。号 字符串之间可以相加,得出一个新的字符串 结果: 需要注意:一个字符串与其他类型做加法,得到的还是字符串每一个加号都会创建出一个新的字符串并放到内存中,这是一种很消耗内存的做法 不过JVM对于String的拼接做了一些优化,号不会很消耗内存了,之后再细说 3。字符串的特殊性 诸小亮:字符串也是对象,也存在于堆内存中,比如: 张小飞:原来它也是对象 诸小亮:不错,不过是一种特殊的对象 张小飞:怎么特殊?1。字符串不可改变 诸小亮:字符串是常量,一旦定义就不能改变,比如:publicstaticvoidmain(String〔〕args)throwsException{Stringstryase;yase再java中就是常量strdaji这里修改的是str的值,不是yase这个字符串,因为它不可变} 张小飞:什么叫‘修改的是str的值,不是yase这个字符串’ 诸小亮:执行Stringstryase;是这样的: 接着,执行strdaji;是这样的: 张小飞:明白了2。一个字符串在内存中只有一份 诸小亮:另外,一个字符串在内存中只有一份 张小飞:这又是什么意思? 诸小亮:看下面代码你就明白了publicstaticvoidmain(String〔〕args){1。str的值,是aaa在内存中的地址Stringstraaa;2。这句代码并不会创建一个新的字符串,因为aaa在内存中已经存在了Stringstr2aaa;System。out。println(strstr2);注意:比较的是它俩指向的内存地址值} 结果: 张小飞:str和str2指向了同一块内存? 诸小亮:是的 张小飞:能够证明一下吗? 诸小亮:当然可以,看下图