Java回顾-String/StringBuilder/StringBuffer
Posted 萌萌虎儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java回顾-String/StringBuilder/StringBuffer相关的知识,希望对你有一定的参考价值。
一、String的特点
1.String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
2.String是一个final类,代表不可变字符序列。
3.字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
4.String对象的字符内容是存储在一个字符数组value[]中的。
5.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。这也是String低效率的原因,如果String对象频繁”改动“,会导致大量副本字符串对象存留在内存中。
6.只要其中有一个是变量,结果就在堆中。例如 String s3= s2+"abc"
String的两种内存解析:
String对象最好用 .equals 做等于比较,如果用 == 可能会有意想不到的结果,如下所示,s1、s2相等,因为它们都代表方法区字符串常量池的同一区域。而s3、s4是new出来的两块存在于堆中的单独区域,实际上完全不是同一个东西。
一个 类的属性如果是String类型,那它实例的属性就存在方法区中,如下图所示:
二、String常用方法
1.int length():返回字符串的长度:returnvalue.length
2.char charAt(int index):返回某索引处的字符returnvalue[index]
3.boolean isEmpty():判断是否是空字符串:returnvalue.length==0
4.String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写
5.String toUpperCase():使用默认语言环境,将String中的所有字符转换为大写
6.String trim():返回字符串的副本,忽略前导空白和尾部空白
7.boolean equals(Object obj):比较字符串的内容是否相同
8.boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
9.String concat(String str):将指定字符串连接到此字符串的结尾。等价于用“+”
10.int compareTo(String anotherString):比较两个字符串的大小
11.String substring(int beginIndex):返回一个新的字符串,它是此字符串的从
beginIndex开始截取到最后的一个子字符串。
12.String substring(int beginIndex,int endIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
13.boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
14.boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
15.boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
16.boolean contains(Char Sequence s):当且仅当此字符串包含指定的char值序列时,返回true
17.int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
18.int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
19.int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
20.int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
-注:indexOf和lastIndexOf方法如果未找到都是返回-1
21.String replace(char oldChar,char newChar):返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。
22.String replace(Char Sequencetarget,Char Sequencereplacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
23.String replaceAll(String regex,String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。
24.String replaceFirst(String regex,String replacement):使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串。
25.boolean matches(String regex):告知此字符串是否匹配给定的正则表达式
26.String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
27.String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中
三、String与char数组/byte数组转换
1、String 与 char[ ]
1. String -> char[ ]
-调用String的 toCharArray()可选参数-截取范围
2. char[ ] -> String
-调用String的构造器
2、String 与 byte[ ]
1.编码: String -> byte
-调用String的 getBytes(),可选参数-字符集
2. 解码:byte -> String
-调用String的构造器
注:解码时,解码使用的字符集必须与编码时使用的字符集一致,否则会乱码
四、StringBuffer/StringBuilder
三者对比:
-String:不可变的字符序列,底层用char[ ]存储,效率最低
-StringBuffer:可变的字符序列,线程安全,效率低,底层用char[ ]存储
-StringBuilder :可变的字符序列,线程不安全,效率高,底层用char[ ]存储
1.原理
底层默认初始化是大小为16的char数组,如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍 + 2,同时将原有数组中的元素复制到新的数组中。
2.方法
不同于String,StringBuffer类的对象必须使用构造器生成。有三个构造器:
1. StringBuffer():初始容量为16的字符串缓冲区
2. StringBuffer(int size):构造指定容量的字符串缓冲区
3. StringBuffer(String str):将内容初始化为指定字符串内容
4. append(xxx):提供了很多的append()方法,用于进行字符串拼接
5. delete(int start,int end):删除指定位置的内容
6. replace(int start,int end,String str):把[start,end)位置替换为str
7. insert(int offset,xxx):在指定位置插入xxx
8. reverse():把当前字符序列逆转
9. int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引
10. String substring(int start,int end) 返回一个从start到end缩阴结束的左闭右开区间的子串
11. int length() 获取长度
12. char charAt(int n ) 返回指定位置的字符
13. void setCharAt(int n ,char ch) 设置指定位置的字符
以上是关于Java回顾-String/StringBuilder/StringBuffer的主要内容,如果未能解决你的问题,请参考以下文章