java26个技巧(张小飞的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 = "亚瑟";
}
张小飞:String既然是一个类,它里面肯定有很多方法吧
诸小亮:不错,其实学习字符串,主要是会使用它的常用方法
张小飞:都有哪些方法呢?
诸小亮:我整理了一些,你看看吧
1. lengthlength():获取字符串长度,比如:
public static void main(String[] args) throws Exception {
String str = "abcd";
int length = str.length();
System.out.println(length);//输出 4
}
chatAt():获取指定下标的字符(下标从 0 开始),比如:
张小飞:这应该输出最后一个字母 ‘d’吧
诸小亮:是的
张小飞:如果指定的下标不存在呢?
诸小亮:那就会报错了,比如:str.charAt(10),字符串中是不存在10这个下标的,结果:
张小飞:原来如此
3. indexOfindexOf:获取指定字符,在字符串中第一次出现的位置,比如:
结果:省略
如果字符串中不存在指定字符,返回 -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. splitsplit:对字符串进行切割,返回一个字符串数组,比如:
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 指向了同一块内存?
诸小亮:是的
张小飞:能够证明一下吗?
诸小亮:当然可以,看下图
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com