张小飞的Java之路字符串(重点)

写在前面:

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

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

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



诸小亮:接下来我们就需要学习——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 开始),比如:


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

诸小亮:是的

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

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

张小飞:原来如此


3. indexOf

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


结果:省略


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


结果:



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


结果:


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


结果:

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"));
}

结果:


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:对字符串进行切割,返回一个字符串数组,比如:

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]);
}

结果:

12. replace

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


结果

13. toLowerCase

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


结果:

14. toUpperCase

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


结果:

15. substring

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


结果:


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

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


结果:

16. toCharArray

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


结果:

17. + 号

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


结果:

需要注意:

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


3. 字符串的特殊性

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

张小飞:原来它也是对象

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

张小飞:怎么特殊?

1. 字符串不可改变

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

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

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


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


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

张小飞:明白了

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

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

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

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

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

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

结果:


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

诸小亮:是的


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

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



展开阅读全文

页面更新:2024-02-05

标签:字符串   半角   下标   数组   空格   字符   内存   位置   重点   地址   方法   张小飞

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top