J2SE学习笔记——第三章java面向对象(第八节String类)

第八节:String 类
1. 实例化String对象
方法一:String name1=“张三”;
方法二:String name2=new String(“李四”);

public class Demo1 {
	public static void main(String[] args) {
		String name1="张三";
		System.out.println("name1="+name1);
		
		String name2=new String("李四");
		System.out.println("name2="+name2);
	}
}

name1=张三
name2=李四

2,"=="VS“equals方法”
“==”,比较的是引用,“equals 方法”比较的是具体内容
J2SE学习笔记——第三章java面向对象(第八节String类)

public class Demo2 {
	public static void main(String[] args) {
	String name1="张三";//直接赋值
	String name2=new String("张三");//new的方式
	String name3=name2;//传递引用
	//==比较的是引用
	System.out.println("name1==name2:"+(name1==name2));
	System.out.println("name1==name3:"+(name1==name3));
	System.out.println("name2==name3:"+(name2==name3));
	
	//equals比较的是内容
	System.out.println("name1.equals(name2):"+(name1.equals(name2)));
	System.out.println("name1.equals(name3):"+(name1.equals(name3)));
	System.out.println("name2.equals(name3):"+(name2.equals(name3)));
}
}
name1==name2:false
name1==name3:false
name2==name3:true
name1.equals(name2):true
name1.equals(name3):true
name2.equals(name3):true

3,String 两种实例化方式的区别
1,直接赋值方式,创建的对象存放到字符串对象池里,假如存在的,就不会再创建;
2,new 对象方式,每次都创建一个新的对象;
J2SE学习笔记——第三章java面向对象(第八节String类)

public class Demo3 {
	public static void main(String[] args) {
		String name1="张三";
		String name2="张三";
		String name3=new String("张三");
		String name4=new String("张三");
		
		System.out.println("name1==name2:"+(name1==name2));
		System.out.println("name1==name3:"+(name1==name3));
		System.out.println("name2==name3:"+(name2==name3));
	}
}
name1==name2:true
name1==name3:false
name2==name3:false

4,字符串的内容不可变性
字符串的特性:不能改变字符串的内容;只能通过指向一个新的内存地址;
J2SE学习笔记——第三章java面向对象(第八节String类)

public class Demo4 {
	public static void main(String[] args) {
		//String内容的不可变性
		String name="张";
		name+="三";
		System.out.println(name);
	}
}

5,String 类常用方法及基本使用
1,char charAt(int index) 返回指定索引处的char 值。

1、public class Demo5 {
	public static void main(String[] args) {
		String name="张三";
		char ming=name.charAt(0);
		System.out.println(ming);
		
		String str="我是中国人";
		for(int i=0;i<str.length();i++) {
			System.out.println(str.charAt(i));
		}
			
	}

}






2,int length() 返回此字符串的长度。
3,int indexOf() 返回指定字符在此字符串中第一次出现处的索引。

3、public class Demo6 {
	public static void main(String[] args) {
		//indexof方法使用实例
		String str="abcdefghdijklmnopqistuvwxyz";
		System.out.println("d在字符串str中第一次出现的索引位置:"+str.indexOf("d"));
		System.out.println("d在字符串str中第一次出现的索引位置,从索引4开始:"+str.indexOf("d",4));
		//System.out.println("w在字符串str中第一次出现的索引位置,从后开始: "+str.lastindexOf("w",8).ToString());
	}
}

d在字符串str中第一次出现的索引位置:3
d在字符串str中第一次出现的索引位置,从索引4开始:8

4,String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

4、
public class Demo7 {
	public static void main(String[] args) {
		//subString方式使用
		String str="不开心每一天,不可能";
		String newstr=str.substring(1);
		String newstr2=str.substring(1,6);
		System.out.println(str);
		System.out.println(newstr);
		System.out.println(newstr2);
	}
}

不开心每一天,不可能
开心每一天,不可能
开心每一天

5,String toUpperCase() 使用默认语言环境的规则将此String 中的所有字符都转换为大写。

5、
public class Demo8 {
	public static void main(String[] args) {
		String str="I'm a handsome boy!";
		String upStr=str.toUpperCase();//转换成大写
		System.out.println("str="+str);
		System.out.println("upStr="+upStr);
		
		String lowerStr=upStr.toLowerCase();
		System.out.println("lowerStr="+lowerStr);
	}

}

综合实例:
编程输入一个字符串,要求去掉前后的空格,然后分别统计其中英文字母,空格,数字和其他字符的个数。

public class Demo9 {
	public static void main(String[] args) {
		String str=" abhjfklrCYJ @ jdb 7 672 ";
		//去掉前面和后面的空白
		String newStr=str.trim();
		System.out.println("str="+str);
		System.out.println("newstr="+newStr);
		
		int yingWen=0;
		int shuZi=0;
		int kongGe=0;
		int qiTa=0;
		
		for(int i=0;i<newStr.length();i++) {
			char c=newStr.charAt(i);
			if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){//判断英文字符
				yingWen++;
				System.out.println("英文字符:"+c);
			}else if(c>='0'&&c<='9') {//判断数字字符
				shuZi++;
				System.out.println("数字字符:"+c);
			}else if(c==' ') {//判断空格
				kongGe++;
				System.out.println("空格字符:"+c);
			}else {
				qiTa++;
				System.out.println("其他字符:"+c);
			}
		}
		System.out.println("英文字符总数:"+yingWen);
		System.out.println("空格字符总数:"+kongGe);
		System.out.println("数字字符总数:"+shuZi);
		System.out.println("其他字符总数:"+qiTa);
	}

}

作业:
1, 字符串反转,“abcdefg”,通过编程得到一个新的字符串“gfedcba”;
思路:我们定义一个新字符串,然后遍历原先字符串,从后往前遍历,每次遍历获取元素然后追加到新字符串。

public class Demo10 {
	public static void main(String[] args) {
		String str="abcdefg";
		String newStr="";
		for(int i=str.length()-1;i>=0;i--) {
			newStr+=str.charAt(i);
		}
		System.out.println(newStr);
	}
}

2, 将字符串“1,3,5,7,9”,转换成数组,数组元素是整数元素1,3,5,7,9

public class Demo4 {
	public static void main(String[] args) {
		String str="1,3,5,7,9";
		int shuZi=0;
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)!=',') {
				shuZi++;
			}
		}
		int []arr=new int[shuZi];
		int j=0;
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)!=',') {
				arr[j]=Integer.parseInt(str.charAt(i)+"");
				j++;
			}
			
		}
		for(int a:arr) {
			System.out.print(a+" ");
		}
	}
}