张小飞的Java之路——第十七章——字符串(重点)

诸小亮:当然了,String 在工作中使用的最频繁了,属于重点内容。张小飞:在 Java 中只要是以 “ ” 括起来的都是字符串,比如:“a”、“你好啊”、“abc”、“亚瑟”、“_$%lakj”

写在前面:

视频是什么东西,有看文档精彩吗?

视频是什么东西,有看文档速度快吗?

视频是什么东西,有看文档效率高吗?

诸小亮:接下来我们就需要学习——String

张小飞:这不就是字符串么,前面也用过几次,还需要单独讲?

诸小亮:当然了,String 在工作中使用的最频繁了,属于重点内容

1. 介绍

诸小亮:你现在对 String 了解多少?

张小飞:Java 中只要是以 ” “ 括起来的都是字符串,比如:”a”、”你好啊”、”abc”、”亚瑟”、”_$%lakj”

诸小亮:不错,String 就是 Java 中描述字符串的类,之前我们定义的 Person 类,只是用了一些基本数据类型, 像:height、weight、age等

“但还有很多属性是无法用基本数据类型来表示的,比如:姓名、地址、座右铭等”

“姓名、地址这些就用 String?”

“是的,比如:”

class Hero{
    String name;//一个人的名字应该是String类型
    String address;//地址应该是String类型
}


public static void main(String[] args){
    //定义一个字符串
    String heroName = "亚瑟";
}

2. 常用方法

张小飞:String既然是一个类,它里面肯定有很多方法吧

诸小亮:不错,其实学习字符串,主要是会使用它的常用方法

张小飞:都有哪些方法呢?

诸小亮:我整理了一些,你看看吧

1. length

length():获取字符串长度,比如:

public static void main(String[] args) throws Exception {
    String str = "abcd";
    int length = str.length();
    System.out.println(length);//输出 4
}

2. chatAt

chatAt():获取指定下标的字符(下标从 0 开始),比如:

张小飞的Java之路——第十七章——字符串(重点)

张小飞:这应该输出最后一个字母 ‘d’吧

诸小亮:是的

张小飞:如果指定的下标不存在呢?

诸小亮:那就会报错了,比如:str.charAt(10),字符串中是不存在10这个下标的,结果:

张小飞的Java之路——第十七章——字符串(重点)

张小飞:原来如此

3. indexOf

indexOf:获取指定字符,在字符串中第一次出现的位置,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:省略

如果字符串中不存在指定字符,返回 -1,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

也可以获取某个子串第一次出现的位置,找不到同样返回 -1,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

还可以, 从指定位置查找子串:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

4. lastIndexOf

lastIndexOf:获取指定字符,最后一次出现的位置,找不到返回 -1

public static void main(String[] args) throws Exception {
    String str = "abcdeeeeecd";
    System.out.println(str.lastIndexOf("cd"));
    System.out.println(str.lastIndexOf("ef"));
}

结果:

张小飞的Java之路——第十七章——字符串(重点)

5. contains

contains:判断是否包含指定子串

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

6. startsWith

startsWith:判断是否以指定子串开头

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

7. endsWith

endsWith:判断是否以指定子串结尾

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

8. isEmpty

isEmpty:判断是否是空字符串,其实就是看字符串的长度是不是0,其源码:

张小飞的Java之路——第十七章——字符串(重点)

9. trim

trim:去除字符串两端的空格,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

10. strip

strip:同样也是去除字符串两端的空格

张小飞:strip 跟 trim有什么不同呢

诸小亮:输入法有全角、半角,你知道吧

张小飞的Java之路——第十七章——字符串(重点)

张小飞:这个了解

诸小亮:trim 只能去除半角的空格,而 strip 都可去除,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

注意:一般情况下都是用半角,所以用 trim 方法足够了

11. split

split:对字符串进行切割,返回一个字符串数组,比如:

public static void main(String[] args) throws Exception {
    String str = "亚瑟,18,3个技能";

    //根据‘,’对字符串进行切割,返回一个字符串数组
    String[] split = str.split(",");
    System.out.println(split[0]+"----"+split[1]+"----"+split[2]);
}

结果:

张小飞的Java之路——第十七章——字符串(重点)

12. replace

replace:替换字符串中的某些字符,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果

张小飞的Java之路——第十七章——字符串(重点)

13. toLowerCase

toLowerCase:把字符串中的大写字母替换成小写字母

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

14. toUpperCase

toUpperCase:把字符串中的小写字母替换成大写字母

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

15. substring

substring:获取指定下标范围的子串

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

注意:包含头下标4,不包含尾下标6

也可以只指定一个下标,比如:

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

16. toCharArray

toCharArray:把字符串转换成字符数组

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

17. + 号

字符串之间可以相加,得出一个新的字符串

张小飞的Java之路——第十七章——字符串(重点)

结果:

张小飞的Java之路——第十七章——字符串(重点)

需要注意:

  • 一个字符串与其他类型做加法,得到的还是字符串
  • 每一个加号都会创建出一个新的字符串并放到内存中,这是一种很消耗内存的做法

不过 JVM 对于 String 的拼接做了一些优化,+号不会很消耗内存了,之后再细说

3. 字符串的特殊性

诸小亮:字符串也是对象,也存在于堆内存中,比如:

张小飞的Java之路——第十七章——字符串(重点)

张小飞:原来它也是对象

诸小亮:不错,不过是一种特殊的对象

张小飞:怎么特殊?

1. 字符串不可改变

诸小亮:字符串是常量,一旦定义就不能改变,比如:

public static void main(String[] args) throws Exception {
	String str = "yase";//yase再java中就是常量
    str = "daji"//这里修改的是str的值,不是"yase"这个字符串,因为它不可变
}

张小飞:什么叫 ‘修改的是str的值,不是”yase”这个字符串’

诸小亮:执行 String str = “yase”; 是这样的:

张小飞的Java之路——第十七章——字符串(重点)

“接着,执行 str = “daji”; 是这样的:“”

张小飞的Java之路——第十七章——字符串(重点)

张小飞:明白了

2. 一个字符串在内存中只有一份

诸小亮:另外,一个字符串在内存中只有一份

张小飞:这又是什么意思?

诸小亮:看下面代码你就明白了

public static void main(String[] args) {
    //1. str的值,是aaa在内存中的地址
    String str = "aaa";

    //2. 这句代码并不会创建一个新的字符串,因为 aaa 在内存中已经存在了
    String str2 = "aaa";
    System.out.println(str == str2);//注意:比较的是它俩指向的内存地址值
}

结果:

张小飞的Java之路——第十七章——字符串(重点)

张小飞:str 和 str2 指向了同一块内存?

诸小亮:是的

张小飞的Java之路——第十七章——字符串(重点)

张小飞:能够证明一下吗?

诸小亮:当然可以,看下图

张小飞的Java之路——第十七章——字符串(重点)

张小飞的Java之路——第十七章——字符串(重点)

张小飞的Java之路——第十七章——字符串(重点)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/91829.html

(0)
上一篇 2024-10-20 17:33
下一篇 2024-10-21 07:26

相关推荐

发表回复

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

关注微信