一、compareTo
compareTo()方法用于按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0。
compareTo 只在方法 equals(Object) 返回 true 时才返回 0。
比较逻辑:
- 首先取出两个字符串的长度,比较较小的长度内,两者是否相等。
- 若不相等,则直接返回该位置字符的ASCII码相减后的值。
- 若各位置都相等,则将两个字符串长度的差值返回。
public class Test {
public static void main(String[] args) {
String str1 = "cat";
String str2 = "Cow";
String str3 = "";
System.out.println(str1.compareTo("cat")); //0
System.out.println(str1.compareTo(str2)); //32
System.out.println(str1.compareTo(str3)); //3
}
}
注意:
1、将字符串与空字符串进行比较,则该方法将返回非空字符串的长度(第三行输出)。
2、compareTo()方法区分大小写(第二行输出结果为'c'与'C'的差值)。不区分大小写的比较方法为compareToIgnoreCase方法。
二、concat
concat()方法可以连接多个字符串。此方法将指定的字符串添加到给定字符串的末尾,并返回组合后的字符串。
public class Test {
public static void main(String[] args) {
String str1 = "This";
str1 = str1.concat(" is").concat(" just a").concat(" String");
String str2 = "world";
str2 = "hello,".concat(str2);
System.out.println(str1); //This is just a String
System.out.println(str2); //hello,world
}
}
三、equals
1、equals()与equalsIgnoreCase() 的区别
equals:区分大小写
equalsIgnoreCase():不区分大小写
public class Test {
public static void main(String[] args) {
String str1 = "world";
System.out.println(str1.equals("World")); //false
System.out.println(str1.equalsIgnoreCase("World")); //true
}
}
2、equals()和contentEquals()的区别
equals()不仅比较这个字符串的内容还检查另一个被比较的对象是否是String类型;contentEquals()只比较两者的内容是否相同,不检查被比较对象的类型。
String s = "hello world";
StringBuilder sb = new StringBuilder("hello world");
System.out.println(s.equals(sb)); //false
System.out.println(s.contentEquals(sb)); //true
比较String类型与String,StringBuilder, StringBuffer, CharBuffer等类型内容的相等性使用contentEquals()。
四、join
经常需要将一个数组或者List的各项通过分隔符连接成字符串。String.Join方法可以实现这一功能。
public class Test {
public static void main(String[] args) {
String[] str = new String[] { "a", "b", "c" };
String myStr = String.join(",", str);
System.out.println(myStr); //a,b,c
}
}
五、split
split方法用于根据给定的分隔符将字符串拆分为其子字符串数组。
- String[] split(String regex):根据分隔符拆分输入字符串后返回一个字符串数组。
- String[] split(String regex, int limit):此方法与上述方法的区别是它限制了拆分后返回的字符串数。例如split("anydelimiter", 3),即使字符串中的分隔符超过3次,也会返回仅3个字符串的数组。
- 如果limit为负,则返回的数组将具有尽可能多的子字符串,但是当limit为零时,将返回去掉尾部空字符串的字符串数组。
public class Test {
public static void main(String[] args) {
String s = new String("bbaaccaa");
String arr1[]= s.split("a", -1);
System.out.println(arr1.length); //5
String arr2[]= s.split("a", 0);
System.out.println(arr2.length); //3,去掉了尾部的两个空字符串
}
使用split()方法时传递多个分隔符
public class Test{
public static void main(String args[]){
String s = " ,ab;gh,bc;pq#kk$bb";
String[] str = s.split("[,;#$]");
System.out.println(str.length); //7
for (int i=0; i < str.length; i++) {
System.out.print("Str["+i+"]:"+str[i]+",");
}
//输出结果:Str[0]: ,Str[1]:ab,Str[2]:gh,Str[3]:bc,Str[4]:pq,Str[5]:kk,Str[6]:bb,
}
}
六、trim
trim():从输入字符串中删除前导和尾随空格后返回一个字符串。
public class Test{
public static void main(String args[]){
String str = new String(" How are you ");
System.out.println("String before trim: "+str+"?");
System.out.println("String after trim: "+str.trim()+"?");
}
}
输出结果:
String before trim: How are you ?
String after trim: How are you?
七、isEmpty
检查字符串是否为空。如果给定的字符串为空,则此方法返回true,否则返回false。也就是说当字符串长度为0时返回true。
public class Test{
public static void main(String args[]){
String str1="";
String str2="hello";
System.out.println(str1.isEmpty()); //true
System.out.println(str2.isEmpty()); //false
}
}