网站首页 > 精选教程 正文
写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
诸小亮:接下来我们就需要学习——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-11-18 Python学习(十)字符串的常用操作详解「Ⅱ」
- 2024-11-18 java基础—string,值得java初学者收藏的文章
- 2024-11-18 Java将 PDF 拆分为多个 PDF 文件
- 2024-11-18 「LeetCode」分割回文串 II Java题解
- 2024-11-18 【算法题】1593. 拆分字符串使唯一子字符串的数目最大
- 2024-11-18 《Java程序设计》课程代码题(一)
- 2024-11-18 JAVA后台开发的瑞士军google guava 集合,字符串实测
- 2024-11-18 Java字符串相关面试题
- 2024-11-18 LeetCode笔记|131:分割回文串
- 2024-11-18 Java基础学习之与字符串相关的正则表达式
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)