一、String类
1、String类也是Object类的子类,同样也会继承Object方法,有些方法会被String类重写
2、String类代表字符串,java程序中的字符串自面值都作为此类的实例存在
3.String类变量的值不能被改变,所以,String对象是不可变的
4、字符串内部,实际上是由一个字符数组组成的,是一个字符序列
5、构造方法:
5/1 String(byte[] byteArray):会将byte数组中的元素自动提升为char型,变成char型
byte[] byteArray ={97,98,99,100};
String str =newString(byteArry);
输出abcd
public String():初始化一个新创建的 String 对象,使其表示一个空字符序列。注意,由于 String 是不可变的,所
以无需使用此构造方法。
public String(String original):使用一个String构造一个String;
以下构造方法将byte数组和char数组转换为String
public String(byte[] bytes):使用一个byte[]数组构造一个String;
public String(byte[] bytes,intoffset,int length):使用一个byte[]数组,从offset位置开始,取length个长度构造一个String
public String(char[] value):使用一个char[]数组构造一个String:
public String(char[] value,intoffset,int count):使用char[]数组的一部分构造一个字符串;
6、String类的其它功能:
6/1 替换功能
Stringreplace(char old,char new):将字符串中的old字符替换为new字符
Stringreplace(String old,String new):将字符串中的old子串,替换为new子串
6/2 去除字符串两空格
Stringtrim()
6/3 按字典顺序比较两个字符串 :按照ASCII码值的顺序比较;主要看三种类型的结果:
6/3/1 负数:当前对象比参数"小";2:为0:当前对象跟参数"相同";3:正数:当前对象比参数"大";
6/3/2 长度相同,按位比;长度不同,比长度差;当前对象的字符长度 - 参数对象的字符长度
intcompareTo(String str):区分大小写:
intcompareToIgnoreCase(String str):不区分大小写:
6/4 判断功能
boolean equals(Object obj):区分大小写:比较两个字符串是否相同,如果两个字符串中包含相同的字符序列,则返回true,否则返回false
boolean equalsIgnoreCase(String str):将此 String 与另一个 String 比较,不考虑大小写。
boolean contains(String str):区分大小写:当且仅当此字符串包含指定的 char 值序列时,返回true。
boolean startsWith(String str):区分大小写:测试此字符串是否以指定的前缀开始。
boolean endsWith(String str):区分大小写:测试此字符串是否以指定的前缀结束:
boolean isEmpty():当且仅当 length() 为 0 时返回 true。跟地址无关;
6/5 获取功能
int length():区分数组的length属性。返回此字符串的长度。
char charAt(int index):返回指定索引处的 char 值。
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。如果未出现该字符,则返回 -1。
int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。如果未出现该字符,则返回 -1。
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中第一次出现处的索引。从fromIndex处开始找
int indexOf(String str,int fromIndex)返回指定字符串在此字符串中第一次出现处的索引。从fromIndex处开始找
String substring(int start):返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
String substring(int start,int end):回一个新的字符串,它是此字符串的一个子字符串.
从start开始,到end - 1(不包含end的元素)
6/6 转换功能
byte[] getBytes():将字符串转换为byte[]数组;
char[] toCharArray():将字符串转换为char[]数组:
static String valueOf(char[] chs):将一个char[]数组,转换为一个String;
static String valueOf(int i):把一个int值,转换为字符串;
String toLowerCase():全部转换为小写
String toUpperCase():全部转换为大写;
String concat(String str):将参数字符串str添加到本字符串的末尾;
7、String类的不可变性
1、 String str = "Hello";
str = "Java";
Hello是一个字面常量,存放在方法区的常量池中,为其分配一个空间和地址,str中保存这个地址。
执行str = "Java"是在常量池中另外分配一个空间和新的地址,str保存一个新的地址
8、对于字符串类的赋值比较特殊,可以不使用new关键字,而直接赋值
9、当我们使用一个字符串自字面量是,虚拟机会现在常量池中查找看有么有此常量,如果没有,会开辟新的空间,返回一个新的引用,如果有则返回此值的引用
9/1 (1)String str = "Hello";//开辟新的空间,存储Hello
(2)String str1 = "Hello";//会将(1)中“Hello”的地址赋给str1,str和str1保存的地址相同
String str = "Hello" +"World";这条语句产生三个内存空间:“Hello”、“World”、“HelloWorld”
字符串做运算时,如果表达式用有变量存在则会产生一个新的空间
(3)System.out.println(str == str1);//true
9/2 (1) String str = new String("Hello");
(2) String str1 = newString("Hello");
System.out.println(str == str1);//false开辟了两段空间,存储在堆区
System.out.println(str.equals(str1));//String类重写了Object的equals()方法,仅仅比较值,值相同则返回true
10、 String str = null;
System.out.println(str.length());//报空指针异常。引用类型如果为空,则还没在堆中为对象开辟空间,想要访问成员变量都访问不到
11、将byte数组转换成字符串的两种方式:
使用构造方法:
char[] charArray = {'a' ,'b' ,'c'};
①String str = new String(charArray);
②String str = String.valueOf(charArray);
11、String与int类型数据的转换
6/1 int--->String
6/1/1 public static StringvalueOf(int i)
6/1/2int --> Integer -->toString()-->String
6/1/3 Integer -->静态方法toString(int n):
6/2 String --> int:
6/2/1 Integer --> 静态方法:parseInt(Strings):
6/2/2 Integer --> Integer valueOf(Strings) --> intValue() --> int
二、StringBuffer
1、StringBuffer是对字符串进行操作的类,尤其是对字符串的增删操作,其内部的字符序列是可以改变的
2、stringBuffer一定要使用构造方法产生对象,不可以直接赋一个字面常量
3、StringBuffer的两个概念:
3/1 容量:
最大可以存放的字符的数量(默认为16个字符)
3/2 长度:
实际存放的字符的数量(默认为0)
注意:容量和长度会自动维护,使用过程中会自动增长
4、构造方法:
StringBuffer():构造一个16个容量的StringBuffer;(常用。容量对于我们程序员来说,一般情况下可以不用考虑)
StringBuffer(String str):使用一个String构造一个StringBuffer;
StringBuffer(int capacity):使用一个容量值构造一个StringBuffer;
5、添加方法
append(各种数据类型):将各种数据类型的数据添加到当前内部字符序列的末尾;
insert(int offset,String str):将参数str插入到当前字符序列的offset位置。之前offset位置上的字符,依次后移;
6、删除方法:
deleteCharAt(int index):删除index位置上的字符;
delete(int start,int end):删除从start开始,到end - 1处的字符;
7、替换功能
public StringBuffer replace(int start,int end,String str)
8、获取方法:
length():获取内部字符的长度;
capacity():获取内部的容量;
9、反转功能:
public StringBuffer reverse():将内部字符序列首位调换;
10、获取当前系统的毫秒值
long start =System.currentTimeMills();//获取当前系统的毫秒值,从1970年1月1日开始到现在的毫秒值
11、截取功能
public String substring(int start):从start开始,截取到末尾;截取后,原Buffer中的内容不变;
public String substring(int start,intend):从start开始,到end- 1 处;
public void getChars(int srcBegin,int srcEnd,char[]desCharArray,int desBegin),将字符序列复制到一个字符数组中
12、String类和StringBuffer类的区别
10/1 String类是不可变的
StringBuffer是可变的
13、String和 StringBuffer的相互转换:
13/1 我们经常会有一些字符串,想对它们进行频繁的拼接操作,这时需要将String转换为StringBuffer:
String--> StringBuffer:
1.StringBuffer的构造方法:StringBuffer(String str)
2.StringBuffer的append(String str)方法
13/2 如果我们操作某个StringBuffer后,想将StringBuffer转换为String:
StringBuffer的toString()方法:(从Object继承的,内部重写后的)
三、StringBuilder与StringBuffer的区别
1、StringBuffer类
1/1 从JDK1.0开始
1/2 线程安全(一个StringBuffer对象可以安全的被多个线程并发访问)
1/3 由于是线程安全的,所以内部做了很多线程方面的处理,所以降低了工作效率
2、StringBuilder类
2/1 从JDK5.0开始
2/2 线程不安全(一个StringBuilder只能被单线程访问,如果多线程访问的话,不保证内部数据的一致性)
2/3 由于线程不安全,内部没做线程方面的处理,工作效率相对较高
四、StringBuffer与数组的区别
1、StringBuffer:可以存储任何数据类型
数组:只能存储定义数组时指定的那个数据类型的数据
2、StringBuffer:后期内部长度和容量是可以改变的
数组:定义数组时指定了长度,后期不可再改变
五、String与其他类型的转换
1、String与int类型数据的转换
1/1 int--->String
1/1/1 静态方法publicstatic String valueOf(int i)
1/1/2int --> Integer -->toString()-->String
1/1/3 Integer -->静态方法toString(int n)
1/1/4 加上一个空串
1/2 String --> int
1/2/1 Integer --> 静态方法:parseInt(Strings)
1/2/2Integer --> Integer valueOf(String s) -->intValue() --> int
2、String与字节数组的转换
2/1 String--->字节数组
public byte[] getBytes()
2/2 字节数据--->String类型
2/2/1 使用String的构造方法:
public String(byte[] bytes):使用一个byte[]数组构造一个String;
public String(byte[] bytes,intoffset,int length):使用一个byte[]数组,从offset位置开始,取length个长度构造一个String
3、String与字符数组的转换
2/1 字符数组--->String
2/2/1 使用构造方法
public String(char[] value):使用一个char[]数组构造一个String:
public String(char[] value,intoffset,int count):使用char[]数组的一部分构造一个字符串;
2/2/2 使用valueOf()方法:String str = String.valueOf(charArray);
使用包装类:Character ch = Character.parse
2/2 String--->字符数组
2/2/1 public char[] toCharArray()
4、String 和StringBuffer的相互转换
4/1 我们经常会有一些字符串,想对它们进行频繁的拼接操作,这时需要将String转换为StringBuffer:
String--> StringBuffer:
1.StringBuffer的构造方法:StringBuffer(String str)
2.StringBuffer的append(String str)方法
4/2 如果我们操作某个StringBuffer后,想将StringBuffer转换为String:
StringBuffer的toString()方法:(从Object继承的,内部重写后的)