String类
String 类不能被继承,因为被final修饰
String的底层是一个字符数组,因为它被final修饰一旦确定了值不可被更改。
概述:
java.lang.String类代表字符串。Java程序中所有的字符串文字(例如:“abc”)都可以看作是实现此类的实例。
类String中包括用于检查字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大小写的所有字符串的副本。
特点:
-
字符串不变:字符串的值在创建后不能被改变。
String str1 = "abc"; String str2 = "abc"; 此时str1 等于 str2 ???why? 因为通过直接赋值的方式创建的String将会被存储到方法区的常量池,系统将会在下一次创建这样的字符串时去常量池查找该值,如果有这个值就把该地址返回给这个String变量。
字符串常量池:
-
因为String对象是不可改变的,所以它可以被共享。
-
"abc"等效于
char[] data = {'a','b','c'};
String str= new String(data);
1、字符串的创建
String =创建的字符串存储在常量池中,而 new 创建的字符串对象在堆上:
// String直接创建,在常量池创建值
String str = "abc";
// new对象创建,在堆中创建值
String str = new String("abc");
// 传入char[]
char[] chs = {'a','b','c'};
String str = new String(chs);
2、获取功能的方法
- int length() 返回此字符串的长度。
- boolean equals(Object anObject)将此字符串与指定的对象比较。
- String concat(String str)将指定字符串连接到此字符串的结尾。
- char charAt(int index)返回指定索引处的 char 值。
- int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。
- int lastIndexOf(String str返回指定子字符串在此字符串中最右边出现处的索引。
- String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
- String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串。
- String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。如果有尾随的空字符串,不会加入到切割后的字符串数组当中。
- contains(CharSequence chars)判断是否包含指定的字符系列。
- boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始。
- boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束
3、转换功能的方法
- char[] toCharArray()将此字符串转换为一个新的字符数组。
- byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
- String replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
- String toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
- String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
- String trim()返回字符串的副本,忽略前导空白和尾部空白。
4、静态方法
-
static String join(CharSequence delimiter, CharSequence... elements)
返回由CharSequence elements
的副本组成的新String,该副本与指定的delimiter
的副本连接在一起.String str = String.join("拼接符","元素1","元素2",...); String str = String.join("-","a","b","c"); // str = "a-b-c"
StringBuffer类和StringBuilder类
StringBuffer和StringBuilder的方法类似
StringBuffer类
线程安全,可变的符号序列。字符串缓冲区就像一个String,但可以修改值, 并且不产生新的未使用对象。
多线程的情况下为了保证线程安全使用StringBuffer
StringBuilder类
一个可变的字符序列。此类提供与StringBuffer的API,但不保证同步(线程不安全)
StringBuilder不能安全的使用**多线程。如果需要同步,那么建议使用StringBuffer**
如果不需要保证线程安全的话建议优先使用StringBuilder
-
构造方法:
- StringBuilder():构造一个没有字符的字符串构建器,初始容量为16个字符。
- StringBuilder(CharSequence seq):构造一个包含与指定的相同字符的字符串构建器CharSequence。
- StringBuilder(int capacity):构造一个没有字符的字符串构建器,由capacity参数指定初始容量。
- StringBuilder(String str):构造一个初始化为指定字符串内容的字符串构建器。长度为
16+传入字符串长度
-
成员方法:
底层是一个char[]如果长度不够,会自动扩容
- public
StringBuffer append(String s)
:将指定的字符串追加到此字符序列。 - public
StringBuffer reverse()
:将此字符序列用其反转形式取代。 - public
delete(int start, int end)
:移除此序列的子字符串中的字符。 - public
insert(int offset, String str)
:将str
参数的字符串插入此序列中。 replace(int start, int end, String str)
使用给定String
中的字符替换此序列的子字符串中的字符。
3、String与StringBuilder的转换
- String -> StringBuilder
// 第一种 String str = "abc"; StringBuilder sb=new StringBuilder(str); // 第二种 String str = "abc"; StringBuilder sb=new StringBuilder(); sb.append(str)
- StringBuilder -> String
// 第1种 StringBuilder sb=new StringBuilder(); sb.toString(); // 第2种 StringBuilder sb=new StringBuilder(); String str = new String(sb);
- public