1.8字符串比较
boolean equals():区分大小写的比较
boolean equalsIgnoreCase():不区分大小写的比较
int compareTo(String anotherString): 当碰到第一个不相等的字符时,终止比较,返回两个字符的ASCII码差值。其中:当
>0时,表示当前字符串 > 目标字符串
=0时,表示当前字符串 = 目标字符串
<0时,表示当前字符串 < 目标字符串
System.out.println("A".compareTo("a")); // -32
System.out.println("a".compareTo("A")); // 32
System.out.println("A".compareTo("A")); // 0
System.out.println("AB".compareTo("AC")); // -1
System.out.println("刘".compareTo("杨"));//-5456
1.9******字符串查找***************
从完整的字符串中判断指定内容是否存在
I.public boolean contains(String str):判断一个子字符串是否存在
II.public int indexOf(String str):从头开始查找字符串的位置,查到了返回位置的开始索引,如果查不到返回-1
III.public int lastIndexOf(String str):从后往前查找指定字符串,若找到返回开始索引,否则返回-1
String str="hello,world";
System.out.println(str.contains("h"));//true
System.out.println(str.indexOf("e"));//1
System.out.println(str.lastIndexOf("l"));//9
IV.public boolean startsWith(String prefix):判断是否以指定字符串开头
public boolean endsWith(String sufffix):判断是否以指定字符串结尾
String str="@@@##hello!!";
System.out.println(str.startsWith("@"));//true
System.out.println(str.endsWith("!"));//true
1.10 字符串替换
I.public String replaceAll(String regex,String replacment):将regex内容的字符串全部替换为replacment
II.public String replaceFirst(String regex,String replacment):替换首个内容
String str="A-B";
System.out.println(str.replaceAll("A","*"));//*-B
System.out.println(str.replaceFirst("A","8"));//8-B
1.11 字符串拆分
讲一个完整的字符串按照指定的格式拆分成若干个子字符串
public String[] split(String regex):将字符串全部拆分
public String[] split(String regex,int limit):将字符串按照指定格式拆分成limit个子字符串
String str ="127.0.0.1";//拆分IP地址
//若拆分的结果为空,则指定的字符串需要转义
String[] result= str.split("\\.");
for(String str1:result){
System.out.println(str1);//127 0 0 1
}
String[] result= str.split("\\.",2);//拆成两个子字符串
for(String str1:result){
System.out.println(str1);
}
1.12字符串截取
public String[] substring(int beginIndex):从指定索引位置开始截取到字符串结尾
public String[] substring(int beginIndex, int endIndex):截取部分内容
String str ="hello world";
System.out.println(str.substring(5));//输出时包括空格
System.out.println(str.substring(0,5)+"c");//输出时不包括空格
应用:首字母大写
:
用到了字符串的截取和转换成大写字母两种方法
public class StringClassTest {
public static void main(String[] args) {
String str="hello";
System.out.print(upperCaseFirstChar(str));
}
public static String upperCaseFirstChar(String str){
return str.substring(0,1).toUpperCase()+str.substring(1);
}
}
1.13其它操作方法
public String toUpperCase():转换成全大写字母
public String toLowerCase():装换成全小写字母
public String trim():去掉字符串中的左右空格,保留中间空格
public native String intern():字符串入池操作
public String concat(String str):字符串连接
public int length():返回字符串长度,长度包括空格
public boolean isEmpty():判断是否为空字符串,但不是null,而是长度为0
if(str==null || str.isEmpty()){
System.out.println("空字符串");
}
以后在判断空字符串时,一定要先判断字符串是否为空,再用isEmpty方法
1.14两个sb类(StringBuffer,StringBuilder)
由于字符串常量不可变更,为了方便进行字符内容的修改,引入两个SB类,与String类完全不是一个东西
在字符串中使用”+”进行字符串内容的拼接操作,这种拼接操作会产生大量垃圾空间(因为字符串常量不可变更),引入两个SB类后,字符串拼接操作改为调用append(各种数据类型)方法:public synchronized StringBuffer append(各种数据类型 b)
1.14.1 String与SB的相互转换:
1.String类变为StringBuffer类
I.调用StringBuffer的构造方法
II.调用append()
2.StringBuffer类变为String类
I.调用toString()
String str="test";
StringBuffer sb=new StringBuffer(str);
sb.append("hello").append("world");
System.out.println(sb.toString());//testhelloworld
StringBuffer和StringBuilder类中的append()方法
public synchronized StringBuffer append(Object obj)
public StringBuilder append(Object obj)
1.14.2
面试题:请解释String类和StringBuffer、StringBuilder的区别
I.字符串常量不可变更,而stringBuffer与StringBuilder内容可以修改(append).
String变量在使用“+”进行字符串拼接时,javac编译器会将String变量变为StringBuilder而后进行append处理。
II.StringBuffer采用同步处理,线程安全,性能较低;
StringBuilder采用异步处理,线程不安全,性能较高
1.14.3 StringBuffer中独有的方法:
字符串反转:public synchronized StringBuffer reverse();
字符串删除:public synchronized StringBuffer delete(int start,int end);
字符串插入:public synchronized StringBuffer insert(int offset,Object obj);