JAVA_Lesson15(传智播客笔记之String、StringBuffer)

String类-特点
String(类)  str(类类型的变量)=”abc”;(字符串其实就是一个对象)
package cn.itcast.string.demo;

public class StringDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		/*
		 * 在eclipse中打一个/*然后回车之后,自动生成了注释。
		 * String类的特点:字符串对象一旦被初始化就不会被改变。
		 */
		StringDemo2();//刚刚是我选中了这一段代码,右击鼠标,选中refactor,然后extract method,就可以将其抽取方法出来。
		
	}

	public static void StringDemo2() {  //需要对StringDemo2上按住ctrl+1才能出来创建方法体的对话框。 
还是没有找到如何切换关键字权限的快捷键。(用tab好像不行)
		// TODO Auto-generated method stub
		String s="abc";//常量池中创建一个字符串对象
		String s1=new String("abc");//现在是堆内存中,其实在堆里面创建了2个对象。
		System.out.println(s==s1);//现在打印的是false,
		System.out.println(s.equals(s1));//打印的是true,之前其实是比较的地址。但是字符串对象比较的是内容,而不比较地址。
		//(因为String类中的equals复写了Object中的equals方法,其实就是比较字符串内容)
			
	}

	/**
	 * 另外ctrl+m当前窗口最大化,还原也是这个操作。
	 * 演示字符串定义的第一种方式,并明确字符串常量池的特点。
	 * 池中没有就建立,池中有,直接用。
	 */
	private static void StringDemo1() {
		String s="abc";//刚开始没有abc,字符串存储在常量池中,就创建了。
		String s1="abc";//发现常量池中已经有了abc常量,所以直接把abc的地址给了s1.
		System.out.println(s==s1); //跟我想的结果一样,运行结果为真。
		System.out.println("s="+s);//直接可以输入syso然后再输入Alt+/即可实现输入标准输入语句。然后再右键,
run as就可以把第一个java程序跑起来了。
	}
String类-构造函数
package cn.itcast.string.demo;

public class StringConstructorDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringConstructorDemo2();
	}

	private static void StringConstructorDemo2() {
		// TODO Auto-generated method stub
		char[] arr= {'w','a','p','q','x'};
		//String s=new String(arr);打印结果为s=wapqx,如果不传arr,那么什么也打印不了。只有s=
		String s=new String(arr,1,3);//打印结果为s=apq;
		System.out.println("s="+s);
	}

	private static void StringConstructorDemo() {
		// TODO Auto-generated method stub为什么每次创建都有这个呢?可以清楚的。在设置里面可以设置。代码模板,问题不大。
		String s=new String();//等效于String s="";不等效String s=null;
		byte[] arr= {65,66,67,68};
		String s1=new String(arr);
		System.out.println("s1="+s1);//结果为S1=ABCD
			
	}

}

常用对象API(String类-常见功能-获取)&(String类-常见功能-转换)&(String类-常见功能-判断)&(String类-常见功能-比较)
package cn.itcast.string.demo;

public class StringMethodDemo {

	public static void main(String[] args) {
		/*
		 * 按照面向对象的思想对字符串进行功能分类。
		 * “abcd”(需要去查API来获取相应的操作方法)
		 * 1.获取:
		 * 1.1获取字符串的个数(长度) int length();
		 * 1.2根据位置获取字符。char charAt(int index);
		 * 1.3根据字符获取在字符串中第一次出现的位置。常理推断应该是这种int (char )但是int indexOf(int ch)不仅仅接受‘a’,
也可以接受传入97.
		 * int idnexOf(int ch,int fromIndex);从指定 的位置开始索引
		 * 
		 * int lastIndexOf(int ch)
		 * int lastIndexOf(int ch,int fromIndex);(自己多用用就熟练了。)
		 * 1.4获取字符串中的一部分字符串。也叫子串。
		 * 	String substring(int beginIndex, int endIndex)
		 * String substring(int beginIndex)
		 * 
		 * 
		 *2.转换
		 *	2.1将字符串变成字符串数组(字符串的切割)
		 *		String[] split(String regex):涉及到正则表达式。
		 *  2.2 将字符串变成字符数组。(这个就不演示了。)
		 *  	char[] toCharArray();
		 *  2.3将字符串变成字节数组(一个汉字占用2个字节)
		 *  	byte[] getBytes()
		 *  2.4将字符串中的字母转成大小写。
		 *  	String toUpperCase():大写
		 *  	String toLowerCase() 小写
		 *  2.5将字符串中的内容替换。
		 *  	String replace(char oldch,char newch)
		 *  2.6将字符串两端的空格去掉。
		 *  	String trim();
		 *  2.7将字符串进行连接。
		 *  	String concatenation(string);
		 *  更多的自己去查API学习。
		 *  3.判断
		 *  	3.1两个字符串内容是否相同啊?
		 *  		boolean equals(Object obj);
		 *  		boolean equalsIgnoreCase(string str);忽略大小写比较字符串内容
		 *  	3.2字符串中是否包含指定字符串?
		 *  		boolean contains(string str);
		 *  	3.3字符串是否以指定字符串开头,是否以指定字符串结尾。
		 *  		boolean startWith(string);
		 *  		boolean endsWith(sting);
		 *  4.比较
		 *  	public int compareTo(Sting anotherString)
		 *  	
		 */
		
		stringMethodDmeo_2();

	}

	private static void stringMethodDmeo_2() {
		//String s="张三,李四,王五";
		String s="张三。李四。王五";//下面如果用.去切的话就会报错,恰恰是正则表达式。那么如何处理呢
		String[] arr=s.split("\\.");
		//String[] arr=s.split(",");
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]); //打印结果为张三,李四,王五分别换行
		
		
		}
		
	}

	private static void stringMethodDmeo_1() {
		String s="abcdae";
		System.out.println("length"+s.length());  //6
		//System.out.println("char:"+s.charAt(2));   // c
		//System.out.println("char:"+s.charAt(20));	//会提示越界了
		System.out.println("index:"+s.indexOf('k'));//-1,我们可以根据-1来判断该字符或者字符串是否存在。
		System.out.println("index:"+s.indexOf('a'));// 0
		System.out.println("index:"+s.lastIndexOf('a'));//4
		System.out.println("index:"+s.substring(2, 4));//包含begin,但是不包含end,只能打印cd.
		
	}

}

常用对象API(String类-常见功能-方法)

package cn.itcast.string.demo;

public class StringObjectDemo {

	public static void main(String[] args) {
		//String s1="abc";
		//String s2="abc";
		
		//intern():可以对字符串池进行操作
		String s1=new String("abc");
		String s2=s1.intern();//操作池中的对象,返回字符串池中的对象。
		System.out.println(s1==s2);//运行结果为false
	}

}
练习题就略过,自己去练习。
StringBuffer字符串缓冲区(其实就是一个容器)
可变数组变长的原理(数组长度肯定不能变的,只是存不到的时候,再复制一个8个长度的数组叠加到后面):


package cn.itcast.p2.stringbuffer.demo;

public class StringBufferDemo {

	public static void main(String[] args) {
		
		
		/*
		 * StringBuffer:就是字符串缓存区。
		 * 用于存储数据的容器。
		 * 特点:
		 * 	1.长度可变
		 * 	2.可以存储不同类型的数据
		 * 
		 * 
		 * 
		 * 既然是一个容器对象。应该具有什么功能呢?
		 * 1.添加:
		 * 	append(data);
		 * 2.删除:
		 * 	StringBuffer delete(start,end);	包含头,不包含尾
		 *  StringBuffer deleteChartAt(int index):删除指定位置的元素
		 * 3.查找
		 * 	char charAt(index);
		 *  int indexOf(string);
		 *  int lastIndexOf(string);
		 * 4.修改
		 * 	StringBuffer replace(start,end,String);
		 *  void setChartAt(index,char);
		 * 
		 * 
		 * 
		 * 
		 */
		bufferMethodDemo2();
		}
	private static void bufferMethodDemo2() {
		
		StringBuffer sb=new StringBuffer("abce");
		//sb.delete(1, 3);
		sb.delete(0, sb.length());//清空缓冲区的操作。sb.setLength(0)也可以实现清空缓存区的操作。
		System.out.println(sb);
	}
	private static void bufferMethodDemo1() {
		StringBuffer sb=new StringBuffer("abce");
		//sb.append("xixi");
		sb.insert(2, "qq");
		System.out.println(sb.toString());
		
		
	}
	
	
	public static void bufferMethodDemo() {
		//创建缓冲区对象。
		StringBuffer sb=new StringBuffer();
		StringBuffer s1=sb.append(4);
		sb.append(4).append(false);//可以一直调用下去,方法调用链
		sb.insert(1, "haha");//在第一个位置处插入haha
		System.out.println(sb);
		System.out.println(s1);
		System.out.println(sb==s1);//你把4放容器里面,其实还是这个4.

	}

}

StringBuider(功能和用法和StringBuffer一模一样)
package cn.itcast.p2.stringbuffer.demo;

public class StringBuilerDemo {

	public static void main(String[] args) {
		
		
		/*
		 * jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuider
		 * 不同的是:
		 * StringBuffer是线程同步的,
		 * 而StringBuidler是不同步的。线程不安全。所以速度更快。(不需要判断锁)
		 * 建议单线程使用Bulider,为了提高效率;而多线程用于Buffer.
		 * 
		 * jdk升级:
		 * 1.简化书写(具备了一定的局限性)
		 * 2.提高效率(也是同样的道理)
		 * 3.增加爱安全性(往往带来书写的麻烦)
		 */

	}

}

/*
 * class StringBuffer//创建一个StringBuffer对象,一个往里面添加,一个往里面删除。需要
 * {
 * 		Object lock;
 * 		public	 StringBuffer append(int x )
 * 		{
 * 			synchronized(lock)
 * 			{
 * 
 * 			}
 * 		}
 * 		public StringBuffer delete(int start,int end)
 * 		{
 * 			synchronized(lock)
 * 			{
 * 
 * 			}
 * 		}
 * }
 * 
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值