把字符串转为字符数组
把字符串转为字节数组
通过这个函数和构造函数,可以实现字符串和字节数组的相互转换;
字母大小写转换
字符串去除前后空格
比较两个字符串的大小
String类方法小结
String的常用方法:
1、获取方法
int length(); 获取字符串的长度
char charAt( int index ) 根据指定的下标获取对应的字符数据
int indexOf( int ch ) 获取指定的字符在字符串中从前往后第一次出现的下标
int indexOf( int ch , int fromIndex ) 获取指定的字符在字符串中从指定的位置往后第一次出现的下标
int indexOf( String str ) 获取指定的字符串在字符串中从前往后第一次出现的下标
int indexOf( String str ,int fromIndex ) 获取指定的字符串在字符串中从指定的位置往后第一次出现的下标
int lastIndexOf( int ch ) 获取指定的字符在字符串中从后往前第一次出现的下标
int lastIndexOf( int ch , int fromIndex ) 获取指定的字符在字符串中从指定的位置往前第一次出现的下标
int lastIndexOf( String str ) 获取指定的字符串在字符串中从后往前第一次出现的下标
int lastIndexOf( String str ,int fromIndex ) 获取指定的字符串在字符串中从指定的位置往前第一次出现的下标
String substring( int beginIndex );截取字符串的子串,从指定下标开始直到字符串结束;
String substring( int beginIndex ,int endIndex );;截取字符串的子串,从指定下标(包括)开始直到指定下标(不包括)结束;
2、判断和比较
boolean isEmpty() 判断字符串是否为空
boolean equals(String anString ) 判断两个字符串是否相等
boolean contains( String s ) 判断指定的字符串在源串中是否存在
boolean startsWith( String str ) 判断是否以指定的字符串开始
boolean endsWith(String str) 判断是否以指定的字符串结尾
- 转换
valueOf() 把其他的数据转成字符串
toCharArray() 字符串转字符数组
getBytes() 字符串转字节数组
toUpperCase() 字符串中所有字母都转大写
toLowerCase() 字符串中所有字母都转小写
- 其他方法
trim(): 去除两端的空格
replace(char oldChar, char newChar):用新字符替换字符串中所有老字符
replace(CharSequence target, CharSequence replacement):用新字符串替换字符串中所有老字符串
int compareTo(String anString ) 根据两个字符串中的字符在编码表中的位置返回的是 零 正数 负数
字符串使用练习
练习1:对字符串中的数据进行排序
需求:把字符串”cbadwighckw”进行排序
练习2:统计指定字符在字符串中出现的次数
需求:统计字符串“adfadfsadfsdf”中字符’a’出现的次数;
需求:统计字符串中英文字母、数字和特殊字符分别出现的次数:
练习3:对字符串按照指定的内容切割,然后排序
需求:对字符串”华山-衡山-庐山-泰山-嵩山”按-进行切割,然后排序;
总结String
String类是由JDK中提供的一个专门用于对字符串进行操作的类,因此在程序中遇到与字符串相关的操作的时候,需要在第一时间内想到使用String类,而不是想着自己如何写代码去实现具体的功能。这种编程思想正是JAVA这门语言所提倡的方式。
String类中还有其他更多的方法,在后续的学习过程中会继续介绍。
字符串缓冲区
字符串缓冲区介绍
频繁修改字符串的问题
需求:将数组中的内容转换为一个字符串输出;
问题:这个程序中有没有什么可以改进的地方?
问题:在这段程序中,在循环里面没执行一次循环,都要对字符串str修改两次,因为字符串是常量值,不能改,所以每修改一次,都会新创建一个字符串对象;
而这个需求中我们只需要最后一个字符串对象,所以循环中创建的大量对象都是无用的,都是内存浪费;
使用字符串缓冲区可以解决这种问题;
结论:
当需要对字符串频繁的修改时,就应该使用字符串缓冲区,避免因为大量创建字符串对象而造成的内存浪费;
Java的字符串缓冲区类
字符串缓冲区也是一个事物,这种事物使用两个类表示:
StringBuffer:是线程安全的,效率相对比较低;如果在多线程环境下,对线程安全有要求,就要使用StringBuffer;
StringBuilder:是线程不安全的,效率相对比较高;如果在单线程环境下,或者对线程安全没有要求,就可以使用StringBuilder;
这两个类提供的功能一模一样;使用方法也一模一样;使用场景不同;
StringBuffer的使用
构造函数
常用功能函数
字符串缓冲区提供的功能,主要是针对缓冲区中的字符数据进行增删改查的操作;
增加数据
- 将数据添加到缓冲区的结尾:
将数据添加到缓冲区指定位置:
删除数据
删除指定索引处的字符
删除指定区间的多个字符
修改数据
反转缓冲区的所有字符
修改缓冲区长度
缓冲区中有长度和容量两个概念;
长度:缓冲区中已经保存的字符的数量;
容量:缓冲区在不扩容的情况下最大能够保存的数据的个数;
如果在调用这个函数时,将参数设置为0,就会失去缓冲区中所有字符,相当于清空缓冲区;
获取数据
获取指定位置的字符
获取指定区间的字符
字符串缓冲区总结
- 缓冲区,是一个容器,可用来存放一些临时数据;
- 字符串缓冲区是一个可以存放字符数据的容器,可以对存放的数据进行增删改查等操作,而且可以在需要的时候将里面保存的数据直接转化为一个字符串常量;
- Java中描述字符串缓冲区的类有两个,分别是StringBuffer和StringBuilder,都保存在java.lang包中;他们的联系和区别是:
- 联系:都是用来描述字符串缓冲区的类,提供的对字符串的操作都一样;
- 区别:
- StringBuffer是线程安全的,但是效率比StringBuilder低;在多线程而且有安全性要求时,应该使用StringBuffer;
- StringBuilder:线程不安全的,但是效率比StringBuffer高;在单线程环境或没有线程安全要求时,应该使用StringBuilder;
- 缓冲区是一个容器,对容器的数据操作,一般都有增、删、改、查四种;
- 增:表示向容器中添加数据
- 删:表示从容器中移除数据
- 改:表示修改容器中的数据
- 查:表示从容器中获取数据
练习:判断一个字符串是否是回文字符串;
“12321” “12321”
思路:将字符串反转,判断和原来的字符串是否相等;
将字符串反转,String类没有这个方法,所以需要先转换为StringBuffer对象,然后就可以反转,再转换为字符串对象,就可以使用equals函数比较;