String m = "ab";
Stirng n = "ab";
String o = "AB";
m与n相同,则m.compareTo(n)
值为0
;
m与o只是大小写不同,则m.compareToIgnoreCase(o)
值为0
,而m.compareTo(n)
值为32
,这里是a与A的ASCII的码值做比较,a对应的码值为97
,A的为65
,这样就不难理解了。
若m与n的位数相同,如m为abcd
,n为abdf
,则m与n则从第一次出现不匹配的位置形如比较ASCII值,这里就是c与d的比较,c-d=-1
。
若m与n的位数不相同,如m为ab,n为abcdef
,m与n都有相同的前缀ab
,则m.compareTo(n)
比较的是值就是两个字符串的位数差,2-6=-4
。
如果与Object
作比较,要先转化为字符串再比较。如m.compareTo(object.toString)
。
这个方法是比较两个字符串特定区域的内容是否一样,返回boolean
类型。
下面的实例是比较str1
中的Hello
与str2
中的hello
,str1.regionMatches(13, str2, 14, 5)
中第一个参数13
是指从str1
的索引为13
的字母开始匹配,第三个参数14
指str2
从索引为14
的字母开始与str1
开始匹配,第四个参数5
指匹配字符的长度。str1.regionMatches(true, 13, str2, 14, 5)
中第一个参数true
指不区分大小写。
public class TestStringRegionMatches {
public static void main(String[] args) {
String str1 = "Hello Wrold, Hello China.";
String str2 = "I con't spell hello";
// 0123456789012345
boolean b1 = str1.regionMatches(13, str2, 14, 5);
boolean b2 = str1.regionMatches(true, 13, str2, 14, 5);
System.out.println(b1);
System.out.println(b2);
}
}
运行结果如下
false
true
indexOf()
这个方法,查找的是特定字符串第一次出现位置的索引,返回的是int
类型,如果查找的结果不存在,则返回-1
。
public class TestStingIndexOf {
public static void main(String[] args) {
String str = "Hello Wrold, Hello China, Hello Beijing.";
int index = str.indexOf("China");
if (index==-1) {
System.out.println("查找的字符不存在");
} else {
System.out.println("index的值为:" + index);
}
}
}
得到的值为19
,如果要查找的值为Hello
,则结果值会为0
,因为只返回第一次匹配上的索引。
lastIndexOf()
这个方法是在字符串中查找第一次出现某个特定字符串的位置,方向是从后向前,找到之后则返回特定字符的索引,找不到匹配的字符串则返回-1
。
String str = "Hello Wrold. Hello MSDN.";
int index = str.lastIndexOf("Hello");
if (index==-1){
System.out.println("没有找到");
} else {
System.out.println("index的值为:" + index);
}
上面程序查找Hello
最后一次出现的位置,就是Hello
中H
的位置,index
的值为13。
subString(0,n) 前闭后开,即包含0,不包含n
根据一个实例来比较这三个方法的不同
public class TestReplaceArray {
public static void main(String[] args) {
String str = "Hello World, Hello China, Hello Beijing, Hello Ncl.";
System.out.println(str.replace("He", "Me"));
System.out.println(str.replace("H\\w{1}", "Me"));
System.out.println(str.replaceFirst("He", "Me"));
System.out.println(str.replaceFirst("H\\w{1}", "Me"));
System.out.println(str.replaceAll("He", "Me"));
System.out.println(str.replaceAll("H\\w{1}", "Me"));
}
}
运行结果如下
Mello World, Mello China, Mello Beijing, Mello Ncl.
Hello World, Hello China, Hello Beijing, Hello Ncl.
Mello World, Hello China, Hello Beijing, Hello Ncl.
Mello World, Hello China, Hello Beijing, Hello Ncl.
Mello World, Mello China, Mello Beijing, Mello Ncl.
Mello World, Mello China, Mello Beijing, Mello Ncl.
由上可知,replace()是全局替换,只支付匹配字符串替换,不支持正则表达式;
replaceFirst(),既支持字符串替换,也支持正则表达式替换,但只替换第一次出现的字符串;
replaceAll(),既支持字符串替换,了支持正则表达式替换,是全局替换。
该方法调用将使 StringBuffer对象的值反转。
public class Test {
public static void main(String args[]) {
StringBuffer buffer = new StringBuffer("Hello World.");
buffer.reverse();
System.out.println(buffer);
}
}
运行结果如下
.dlorW olleH
直接上实例,split()
括号内的界定符要用正则表达式写,split()
方法分割完字符串返回的是一个字符串数组,可以用循环输出结果。
public class TestStringSplit {
public static void main(String[] args) {
String str = "blog.csdn.net";
String delimeter = "\\."; // .在正则在可以匹配任意字符,这里要用转义符
String result[] = str.split(delimeter);
for (String x : result) {
System.out.println(x);
}
}
}
输出结果如下
blog
csdn
net
这个看实例就可以了
public class TestStringUpperAndLower {
public static void main(String[] args) {
String str = "Hello Wrold";
System.out.println("转换为大写:" + str.toUpperCase());
System.out.println("转换为小写:" + str.toLowerCase());
}
}