String学习笔记
(一)String 一旦初始化就不可被改变;
package cn.cx.string.study;
publicclass Demo01 {
publicstaticvoid main(String[] args) {
String s1 = "asd";//s1是一个类类型变量,"asd"是一个对象。
//s1 = "as";//"asd"没变,s1这个引用变了
String s2 = new String("asd");
System.out.println(s1==s2);//false,比较地址值
System.out.println(s1.equals(s2));//true,String类覆写了equals方 法,定义了自身独特的
//内容,并未再去比较地址值。
//s1与s2的区别:s1代表一个对象,s2有两个
}
package cn.cx.string.study;
publicclass Demo02 {
publicstaticvoid main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2);//true,指向同一对象
System.out.println(s1==s3);//false
}
}
(二)四道练习:
package cn.cx.string.study;
publicclass MyTrim {
publicstaticvoid main(String[] args) {
/*String s = " dfg jh ";
System.out.println(myTrim(s));
System.out.println(myTrim(s).length());*/
//System.out.println(myReverse("asdfrth"));
/*String ori = "aaffgsgaaghdaafraalaak";
String myStr = "aa";
System.out.println(myNum2(ori,myStr));*/
String l = "asdfgjavajdch";
String s = "asjavappoub";
System.out.println(getMaxSubStr(l,s));
}
//自定义trim
publicstatic String myTrim(String str) {
int start = 0;
int end = str.length()-1;
while(start<end && str.charAt(start)==' ') {
start ++;
}
while(start<end && str.charAt(end)==' ') {
end --;
}
return str.substring(start, end+1);
}
//反转
publicstatic String myReverse(String str) {
char[] chs = str.toCharArray();
for(int i=0; i<chs.length/2; i++) {
char temp = chs[i];
chs[i] = chs[chs.length-i-1];
chs[chs.length-i-1] = temp;
}
returnnew String(chs);
}
//获取一个字符串在另一个字符串的次数
publicstaticint myNum(String oriStr, String myStr) {
int num = 0;
int index = 0;
while((index = oriStr.indexOf(myStr)) != -1) {
num ++;
oriStr = oriStr.substring(index+myStr.length(), oriStr.length());
System.out.println(oriStr);
}
return num;
}
publicstaticint myNum2(String oriStr, String myStr) {
int num = 0;
int index = 0;
while ((index=oriStr.indexOf(myStr, index))!= -1) {
num ++;
index = index + myStr.length();
}
return num;
}
//获取两字符串中最大相同子串
publicstatic String getMaxSubStr(String l, String s) {
String temp = null;
for(int i=0; i<s.length(); i++) {
for(int j=0,z=s.length()-i; z!=s.length()+1; j++,z++) {
temp = s.substring(j, z);
if(l.contains(temp)) {
return temp;
}
}
}
returnnull;
}
(三)StringBuffer是字符串缓冲区,是容器,且长度可变,线程同步。StringBuilder是线程不同步的,单线程时使用效率高。