String自身特点:
String被初始化之后不能被修改的
String s = “first str”;
s = “second str”;
这个过程中,s的引用的地址变了,但是想要改变s之前指向的字符串对象,是无法改变的,只能将s指向新的字符串对象。
String s1 = “abc”;
String s2 = new String(“abc”);
两者有何区别:
第一句有一个对象(“abc”是一个对象)
第二句有两个对象(一个是new出来的对象,一个是“abc”对象)
原因:
两个而引用指向的对象不一样。
equals 方法比较的是地址值。但是 String
复写了 Object 中的 equals 方法,String 定义了自己独特的判断相同的规则——
判断字符串内容是否相同。
String s1 = “abc”;
String s2 = new String(“abc”);
String s3 = “abc”;
System.out.println(s1==s2);
System.out.println(s1==s3);
打印结果是:false,true
为什么第二个是true:
由于对于String这种特殊的类,它的字符串对象存储在
常量池内存中,如果常量池中已经存在了“abc”对象,那么如果在创建一个相同的“abc”对象,比较浪费,所以可以
直接用新的引用指向已经存在的“abc”。
String 的常用方法:
1、获取
1.1 字符串中包含的字符数,也就是字符串的长度。
int length() : 获取长度
1.2 根据位置获取位置上的某个字符
(给我位置找字符)
char charAt(int index)
1.3 根据字符获得该字符在字符串中的位置
(给我ASCII码找位置)
int indexOf(int ch) : 返回的是ch在字符串中第一次出现的位置 ,ch是ASCII码
int indexOf(int ch,int fromIndex) :从fromIndex开始,获取ch在字符串中出现的位置
int indexOf(String str) : 返回的是str在字符串中第一次出现的位置
(给我字符串找位置)
int indexOf(String str,int fromIndex) :从fromIndex开始,获取ch在字符串中出现的位置
(如果没有则返回 -1)
-----------------------------------------------------------------------------------------------------------------
2、判断
2.1 判断字符串中是否包含一个子串
boolean contains(CharSequence str):CharSequence是一个接口,String,StringBuffer和StringBuilder都是他的子类
特殊之处:indexOf(String str):可以索引str第一次出现的位置,如果返回-1,表示str不在该字符串中存在,所以也可以用来判断str的是否包含:
if(string.indexOf(“aa”)!= -1)
所以 indexOf(Stirng str)既可以获得第一次出现的位置,又可以判断是否存在。
2.2 字符串中是否有内容
boolean isEmpty(): 实际上就是判断字符串长度是否为0
注意:
“”与 null 是有区别的:前者是个对象,只不过内容是空,引用还是有指向对象的;而后者引用连指向对象都没有。
2.3 字符串是否以指定内容开头
boolean startsWith(String str)
2.4 字符串是否以指定内容结尾
boolean endsWith(String str)
2.5 判断字符串的内容是否相同,复写了Object中的equals()方法
boolean equals(String str)
2.6 判断字符窜的内容是否相同,并忽略大小写
boolean equealsIgnoreCase(String str)
-----------------------------------------------------------------------------------------------------------------
3.、转换
3.1 将字符数组转换成字符串
构造函数:
String(char arr[ ])从数组的开始到最后所有的字符转换成字符串
Stirng(char arr[ ],int offset,int count):从数组的第几个字符开始往后选择
count个字符转换成字符串
3.2 将字符串转换成字符数组
toCharArray()
3.3 将字节数组转换成字符串
String(byte arr[ ])从数组的开始到最后所有的字符转换成字符串
Stirng(byte arr[ ],int offset,int count):从数组的第几个字符开始往后选择count个字符转换成字符串
3.4 将字符串转换成字节数组
( IO中的字节流中需要将字符流转换成字节流 )
getBytes()
3.5 将基本数据类型转换成字符串
String static valueOf(int num)
String static valueOf(int num,int offset,int count)
-----------------------------------------------------------------------------------------------------------------
4、替换
4.1 String replace(char oldChar,char newChar)
注意:
1、该方法返回的是一个新字符串,
因为字符串对象是不能被改变的
String s = "hello java";
String s1 = s.replace("java", "n");
System.out.println("s= "+s);
System.out.println("s1= "+s1);
输出的结果是:
s= hello java
s1= hello n
2、
如果要替换的字符不存在,则返回原字符串
4.2 String replace(String oldString,String newString)(与上同理)
-----------------------------------------------------------------------------------------------------------------
5、切割
5.1 String[ ] split(String str) : 返回值是一个字符串数组
String name = "zhangsan,lisi,wangwu";
String[] arrName = name.split(",");
//长度自动生成
for(int i = 0;i < arrName.length;i++){
System.out.println("name= "+arrName[ i ]);
}
-----------------------------------------------------------------------------------------------------------------
6、子串
6.1 获得字符串中的一部分
String substring(int begin) :从指定开头到结尾
String substring(int begin,int end) :
包含头,不包含尾
-----------------------------------------------------------------------------------------------------------------
7、转换、去空格、比较
7.1 将字符串转换成大写或者小写
String toUpperCase()
String toLowerCaes()
注意:调用这两个方法的字符串没有变,这两个方法返回的是一个新的字符串
7.2 将字符串
两端多个空格去除
Stirng trim()
String str = " hello java ";
String str2 = str.trim();
System.out.println(str);
System.out.println(str.length());
System.out.println(str2);
System.out.println(str2.length());
打印结果为:
hello java
17
hello java
10
(这三个方法都返回新的字符串)
7.3 对两个字符串进行自然顺序的比较