1,字符串比较相等
2,取字符串的子串
3,字符数组与字符串的相互转化
4,判断字符串中某个字符是否是汉字
1,、字符串的比较
最常见的是equals 和==
(1)boolean equals(Obfect str);
boolean equalsIgnoreCase(String str); 只是大小写的区别
(2)但是equals和==却有着本质的不同:只要字符串中的字符是相同的(长度、内容),那么equals就返回true; 但是对于==,必须是当两个引用是指向相同的对象实例时(等号左右的两个变量是否指向同一内存地址),才返回true。可以得出,如果满足== , 则一定满足equals,但是如果equals为真,==不一定为真(因为仅仅是字面上的相等)。
即:== 是判断严格相等;equals只是表面相等。
注意:
对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同
(3)一个具体的例子
public class mystring {
public static void main(String args[])
{
String s1="abc";
String s2=s1;
String s5="abc";
String s3=new String("abc");
String s4=new String("abc");
System.out.println("s1==s5: "+(s1==s5));
System.out.println("s1==s2: "+(s1==s2));
System.out.println("s1.equals(s2):"+s1.equals(s2));
System.out.println("s3==s4: "+(s3==s4));
System.out.println("s1.equals(s4):"+s1.equals(s4));
System.out.println("s3.equals(s4):"+s3.equals(s4));
}
}
输出结果为:(这一点同c++是特别像的)
s1==s5: true //因为s1,s5中的字符串都是放在常量池中,在内存中只要一份副本(对于值相同的String常量,在常量池中只会创建一个)
s1==s2: true
s1.equals(s2):true
s3==s4: false //两次new,肯定是两个不同的对象,放在了内存的heap区
s1.equals(s4):true
s3.equals(s4):true
(4)再一个具体的例子,用到了intern()方法(结果就大不相同哦)
public class teststring {
public static void main(String args[]){
String s1=new String("aaa777");
s1=s1.intern();
String s2="aaa777";
System.out.println(s1==s2);
}
}
输出为:true;
当调用intern方法时,如果String POOL中已经包含一个等于(用equals(Object)方法确定)此string对象的字符串,则返回池中的字符串,否则,将此String对象添加到池中,并返回此String对象在string pool中的引用。由于执行了s1=s1.intern();会使S1指向String pool中值为”aaa777“的字符串对象,s2也指向了同样的对象,所以结果为true.
2,取子串的函数
String substring(int startIndex, int endIndex);
两个参数为开始下标和结束下标,第二个参数可省略(到字符串结束),两个下标是前包括,后不包括。
3.字符数组与字符串的相互转化
(1)其中,Stringy类有一个构造函数是利用了字符数组,
String(char [ ]value);
String(char [ ]value,int offset,int count); //第二个参数为开始下标,第三个参数为字符个数
所以,字符数组转化成字符串可以用,
char ch[]={'h','e','l','l','o'};
String ss=new String(char); 或另一种带三个参数的。
(2)当字符串向字符数组转化时,可以用字符串的一个函数char [] toCharArray()
String ss="hello";
char ch[]=new char[20];
ch=ss.toCharArray(); //或直接char ch[]=ss.toCharArray();
4
判断字符串中某个字符是否是汉字,如果为汉字,则字节为两个字节;如果为字母和数字等,则为一个字节。可先取出某字符,封装成字符串,调用字符串的函数,转化成字节数组,再求长度看是否为2.
String ss="南京nj";
char c=ss.charAt(0);
String s2=String.valueOf(c);
int len=s2.getBytes().length;
if(len==2) System.out.println("is Chinese");