String类就是字符串类型,C语言中要表示字符串只能使用字符数组或者字符指针,而Java提供了字符串类
一.常用方法
1.字符串构造
String类提供的构造方法非常多,常用的有以下三种
String名是一个引用
System.outprintln(s1.isEmpty());//判断字符串是不是空的
//如果字符串长度为0,返回true,否则返回false
String str1 = "";//这个字符串是空的
String str2 = null;//str2这个引用不指向任何对象
在Java中,引起来的也是String类型对象
2.字符串的比较
字符串比较是常见操作,比如字符串排序。Java中提供了4种方式
1.==比较是否引用同一个对象
注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址
String str1 = "abcd";
String str2 = "abcd";
System.out.println(str1 == str2);
String str3 = new String("abcd");
String str4 = new String("abcd");
System.out.println(str3 == str4);
System.out.println(str3.equals(str4));
输出:
true
false
true
为什么第一个会输出true呢?
这是因为堆中会有个常量词,""会放入常量词
2.compareTo比大小
第一个不一样的位置的大小就是整个字符串的大小
如果两个字符串前面位置都一样,然后长度不一样,那么谁长谁大
3.compareToIgnoreCase(),与compareTo类似,但是忽略大小写影响
3.字符串查找
int lastIndexOf(String str):从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str,int fromIndex):从fromIndex的位置开始找,从后往前找str第一次出现的位置,没有返回-1
4.转化
1.数值和字符串转化
2.大小写转换
3.字符串转数组
String s = "hello";
//字符串转数组
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]+" ");
}
System.out.println();
//数组转字符串
String s2 = new String(ch);
System.out.println(s2);
}
4.格式化
String st = String.format("%d-%d-%d",1999,9,1);
System.out.println(st);
5.字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
把所有的ab替换为oooo
把所有b替换成z
替换首个ab成kk
、
把所有ab都替换成kk
注意:由于字符串是不可变对象,替换不修改当前字符串,而是产生一个新的字符串
6.字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
可用方法:
String[] spilit(String regex):将字符串全部拆分
String[] split(String regex,int limit):将字符串以指定格式,拆分成limit组
将str以&分割
输出
以空格分隔
输出四个值
将str2分成两组
输出
注意:
输出四组
7.字符串截取
从一个完整的字符串之中截取出部分内容,有如下方法
String substring(int beginIndex):从指定索引截取到结尾
String substring(int beginIndex,int endIndex):索引部分内容
输出bcdef
8.其他操作方法
9.字符串的不可变性
String是一种不可变对象,字符串中的内容是不可改变的,是因为
String类在设计时就是不可改变的,String类实现描述中以及说明了
10.字符串修改
注意:尽量避免对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新的对象,效率非常底下
二.StringBuilder和StringBuffer
1.StringBuffer介绍
由于String的不可更改特性,为了方便字符串修改,Java提供了StringBuider和StringBuffer类。这两个类的大部分功能是相同的
等等
append
append的优势在于没有重建一个新的对象,效率较高
String和StingBuider最大的区别在于String的内容无法修改,而StringBuider的内容可以修改。频繁修改字符串的情况考虑使用StringBuider
注意:String和StringBuider类不能直接转换。如果要想互相转换,可以采用如下原则
- String变为StringBuider:利用StringBuider的构造方法或append()方法
- StringBuider变为String:调用toString()方法
三.String类oj
1.第一个只出现一次的字符