五、字符串查找
- 判断一个子串是否存在于主串中:调用String类的contains方法,返回值为boolean。
- 从头开始查找一个子串,并返回第一个子串开始的索引位置,如果没有,则返回-1。也可以传入一个索引,代表是从哪个索引位置开始寻找,调用String类中的indexOf方法。
- 从尾处开始寻找,查看主串中有无传入的子串,若有则返回索引值,没有则返回-1。调用String类的lastIndexOf,并且也可以传入索引代表从哪个索引值从尾处寻找到头处。调用String类的lastIndexOf
代码1:
当我们要找的子串刚好被“切断”时,它仍然会取到后面的字符返回子串开始的索引值,但是后面的字符的索引值不能取到。
- 判断一个字符串是否以指定子串开头,调用String类中的startsWith方法。也可以传入索引值说明从指定位置开始判断是否以指定子串开头。
- 判断一个字符串是否以指定子串结尾。调用String类当中的endsWith方法。
六、字符串替换
替换字符串中的所有的指定内容。调用String类当中的repalceAll方法。
也可以选择替换字符串中的首个内容。调用String类中的repalceFirst方法。
七、字符串拆分
指定字符串在主串的基础上能分为几个组就等于分为几个String类数组。因此可以通过foreach循环来遍历拆分后的数组的内容。调用String类的split方法。
split方法还能够传入一个limit参数,代表拆分后最多分为几个数组。如果拆分后数组的个数小于这个limit值则按原来拆分的数组的个数拆分,否则数组的个数不能够超过limit值
当然,对于字符串的拆分可以嵌套拆分,即先拆分为两部分,再根据另一个字符串再拆分。
对于字符串的拆分还有几种特殊情况,当遇到需要拆分的为转义字符时,传入指定的字符串则需要传多两个斜杠。例如:
因此需要注意的是:字符"|“,”*“,”+“都得加上转义字符,前面加上”\"。
对于字符串的拆分还可以根据多个指定的字符串进行拆分,指定的字符串之间用‘|’分隔。
八、字符串截取
对于一个字符串的截取,传入一个索引值代表是从哪个索引开始截取。传入两个索引值则代表截取的范围。调用String类中的substring方法。例如:
注意:
索引从0开始
注意前闭后开区间
的写法, substring(0, 5) 表示包含 0 号下标的字符, 不包含 5 号下标
对于以上字符串操作的方法,我们可以查看其原码能够更好地了解该方法是如何进行操作的。
九、String类中其它的常用方法
- String类的trim方法。这个方法是用来去掉字符串中左右两边空格,而字符串中间的空格是不会去掉的。
代码:
- String类中的toUpperCase和toLowerCase方法。toUpperCase是用来将字符串中的小写字母转变为大写字母,而不是字母的不进行处理。toLowerCase方法是用来将字符串中的大写字母转变为写写字母,而不是字母的也不进行处理。
String类中的concat方法。这个方法是用来连接字符串的,相当于字符串中的拼接,但是连接后的字符串不会入到字符串常量池当中。这里不再演示。
String类中的length方法。它是用来求字符串长度的,跟数组不一样,数组中的length是数组的属性,而String中的length是一个方法。
代码:
- String类中的isEmpty方法。是用来判断字符串是否为空的。
代码:
十、StringBuffer 和 StringBuilder
对上面String字符串常量池有了了解后,我们知道了String是常量,是不可变的。当拼接时,Java会在编译期间将String类的对象拼接优化为StringBuffer的拼接(不会产生新对象),因此Java中有StringBuffer和StringBuilder中处理字符串,并且它们拼接时不会产生新的对象,而是在原来的字符串基础上拼接。后面我们再将StringBuilder和StringBuffer的区别。
StringBuilder中有一个append方法可以将字符串在原来的基础上拼接。例如当我们有这样的代码时:
会在常量池中产生很多的临时变量,例abc0会在字符串常量池中产生,abc01又会在字符串常量池中产生等等。如果我们用到StringBuilder的append方法时,可以写为(两种写法最后的结果是相同的,只是StringBuilder处理时不会在字符串常量池中产生临时变量):
打印时为什么能够打印StringBuilde类型是因为StringBuilder中重写了父类的toString方法,它能够把StringBuilder类型转变为String类型进行打印。
append方法也可以连着使用。代码如下:
因此:
- String变为StringBuffer:利用StringBuffer的构造方法或append()方法。
- StringBuffer变为String:调用toString()方法。
(1)StringBuilder与StringBuffer的区别
StringBuilder与StringBuffer中的方法都是大致相同的。
它们的主要区别就是
StringBuilder主要是用于单线程
的,而StringBuffer主要是用于多线程的
我们点入StringBuffer
类当中按住ctrl+7选择append方法看到如图所示的synchronized
英文,则代表是多线程
使用的,而StringBuilder类中没有。
结论:
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
StringBuffer与StringBuilder大部分功能是相似的StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作
(2)StringBuilder与StringBuffer常用的方法
StringBuilder与StringBuffer常用的方法一般String类当中都是没有的,例如:append方法、delete方法、reserve方法、insert方法等。
reverse方法:
delete方法:
insert方法: