判断字符串相等:
public static void main(String[] args) {
// TODO Auto-generated method stub
String name = new String("Jack");
String dbValue = new String("Jack");
System.out.println(name==dbValue);
System.out.println(name.equals(dbValue));
System.out.println(dbValue.equalsIgnoreCase(name));
String str1="Tom";
String str2="Tom";
System.out.println((str1==str2)+"str1==str2");
}
以上程序会输出 :
false
true
true
truestr1==str2
第一个为什么不相等呢,在java中使用new创建的对象其实是在堆内存中,所以两个不同对象的地址是不同的,所以使用==比较得到的就是false,当使用String类的equals方法时比较的是两个String对象的内容,所以得到的boolean值是true。
而equaisIgnoreCase方法为忽略大小写的判断两个字符串是否相等。
再来看看是str1和str2为什么就可以使用==呢,因为用双引号的字符串其实在内存中有一个匿名对象,内存也只会有一份,当给引用对象赋值时,其实在内存中只会有这一份,所以str1和str2在内存中指向了同一块内存。
在String中还提供了endswith和startswith方法:
public static void main(String[] args) {
// TODO Auto-generated method stub
String a = "HelloJava.java";
boolean bool1 = a.endsWith(".java");
boolean bool2 = a.endsWith(".jpg");
System.out.println("bool1 = "+bool1);
System.out.println("bool2 = "+bool2);
String b = "新华社发来消息";
boolean bool3 = b.startsWith("新华社");
boolean bool4 = b.startsWith("新华书店");
System.out.println("bool3 = "+bool3);
System.out.println("bool4 = "+bool4);
}
输出结果:
bool1 = true
bool2 = false
bool3 = true
bool4 = false
这里一个是比较字符串末尾与指定字符串并返回bool值,一个是从头比较的方法,要根据具体情况使用对应的方法。
去除字符串的空格:
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = " abc ";
System.out.println("["+str1+"]");
System.out.println("["+str1.trim()+"]");
String str2 = " a b c de f ";
System.out.println("["+str2+"]");
//replaceAll第一个参数为正则表达式,第二个参数为替换成的内容
System.out.println("["+str2.replaceAll("\\s", ".")+"]");
}
输出结果:[ abc ]
[abc]
[ a b c de f ]
[abcdef]
第一个方法是trip方法,没有参数,它会去除字符串开头和结尾的空格,并且返回去掉空格后的字符串;
第二个方法是replaceAll,第一个参数为正则表达式,第二个参数为替换成的内容,当然你也可以将任意字符替换为其它的,注意这里正则表达式。