java基础---String & StringBuffer & StringBuilder

String类特点:字符串对象一旦被创建就不会被改变

public class StringDemo {

	public static void main(String[] args) {
		//stringDemo1();
		stringDemo2();
	}

	public static void stringDemo2() {
		// TODO Auto-generated method stub
		String s1="abc"; //在常量池中创建一个字符串对象
		String s2=new String("abc");//创建另个字符串对象,一个new对象在堆内存中
		System.out.println("s1="+s1);
		System.out.println("s2="+s2);
		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));
		//String类中的equals方法复写Object类中的方法,建立了自己类中判断字符串是否相等的依据
		//其实就是比较字符串内容
	}

	/**
	 * 演示字符串的第一种创建方式,并明确字符串常量池的特点
	 * 池中没有就建立,有就直接用
	 */
	private static void stringDemo1() {
		String s="abc";//"abc"存储在字符串常量池中
		String b="abc";
		System.out.println(b==s);
	}
}

构造方法:

public class StringConstructorDemo {

	public static void main(String[] args) {
		stringConstructorDemo();
	}

	private static void stringConstructorDemo() {
		String s=new String();//等效于String s=“”,不等效于String s=null;
		char[] arr= {'d','h','f','e'};
		String v=new String(arr,1,2);
		System.out.println("v="+v);
	}
}

Test1:

public class StringSort {

	public static void main(String[] args) {
		String[] arr= {"abc","dnw","hak","krfk","lkjdk","ehw"};
		printSort(arr);
		sortarr(arr);
		printSort(arr);
	}

	private static void sortarr(String[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for(int j=i+1;j<arr.length;j++){
				if(arr[i].compareTo(arr[j])>0)
					swap(arr,i,j);
			}
		}
	}

	private static void swap(String[] arr, int i, int j) {
		String temp=arr[i];
		arr[i]=arr[j];
		arr[j]=temp; 
	}

	public static void printSort(String[] arr) {
		for(int i=0;i<arr.length;i++)
			System.out.print(arr[i]+",");
			System.out.println();
	}
}

Test2:求在指定字符串中子串出现的次数 

public class StringTest_2 {

	public static void main(String[] args) {
		
		String str="dfeikjhdbejakjhudneskjhpsnkjheqbsgkjh";
		String key="kjh";
		//int count=indexcounts_1(str,key);
		int count=indexcounts_2(str,key);
		System.out.println("count ="+count);	
	}
//方法一
	public static int indexcounts_2(String str, String key) {
		int count=0;
		int index=0;
		while((index=str.indexOf(key,index))!=-1) {
			index=index+key.length();
			count++;	
		}
		return count;
	}
//方法二
	public static int indexcounts_1(String str, String key) {
		
		int count=0;
		int index=0;
		while((index=str.indexOf(key))!=-1) {
			str=str.substring(index+key.length());
			count++;
		}
		return count;
	}
}

Test3:

public class StringTest_3 {

	public static void main(String[] args) {
		String s1="mciegajyabcd;ewdkbvdsdyjvxd";
		String s2="abcd";
		String s=getMaxstring(s1,s2);
		System.out.println(s);
		}

	public static String getMaxstring(String s1, String s2) {
		String max=null;
		String min=null;
		String sub=null;
		max=(s1.length()>s2.length())?s1:s2;
		min=(max.contains(s1))?s2:s1;
		for(int x=0;x<min.length();x++)
			for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
			{
				sub=min.substring(y, z);
				if(max.contains(sub)) 
					return sub;
			}
			return null;
	}
}

Test4:

public class StringTest_4 {

	public static void main(String[] args) {
		
		String str="     a  cv f     ";
		System.out.println("-"+str+"-");
		String ts=getTrim(str);
		System.out.println("-"+ts+"-");
	}

	public static String getTrim(String str) {
		
		int start=0,end=str.length()-1;
		while(start<end&&str.charAt(start)==' ')
		{
			start++;
		}
		while(start<end&&str.charAt(end)==' ')
		{
			end--;
		}
		return str.substring(start, end);
	}
}

StringBuffer:

         * StringBuffer:就是字符串缓冲区。
         * 用于存储数据的容器。
         * 特点:
         * 1,长度的可变的。 
         * 2,可以存储不同类型数据。
         * 3,最终要转成字符串进行使用。
         * 4,可以对字符串进行修改。
         * 
         * 既然是一个容器对象。应该具备什么功能呢?
         * 1,添加:
         *         StringBuffer append(data);
         *         StringBuffer insert(index,data);
         * 2,删除:
         *         StringBuffer delete(start,end):包含头,不包含尾。
         *         StringBuffer deleteCharAt(int index):删除指定位置的元素 
         * 3,查找:
         *         char charAt(index);
         *         int indexOf(string);
         *         int lastIndexOf(string);
         * 4,修改:
         *         StringBuffer replace(start,end,string);
         *         void setCharAt(index,char);
         * 增删改查  C(create)U(update)R(read)D(delete) 

public class StringBufferDemo {

	public static void main(String[] args) {

		bufferMethodDemo_2();
	}
	
	private static void bufferMethodDemo_2() {
		StringBuffer sb = new StringBuffer("abce");
		
//		sb.delete(1, 3);//ae
		
		//清空缓冲区。
//		sb.delete(0,sb.length());
//		sb = new StringBuffer();
		
//		sb.replace(1, 3, "nba");
//		sb.setCharAt(2, 'q');
		
//		sb.setLength(10);
		
//		System.out.println("sb:"+sb);
//		System.out.println("len:"+sb.length());
		
		System.out.println(sb.reverse());		
		
	}

	private static void bufferMethodDemo_1() {
		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();
		
		sb.append(4).append(false);//.append("haha");
		sb.insert(1, "haha");
//		sb.append(true);
		
		System.out.println(sb);	
	}
}

StringBuilder:

         * jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder
         * 
         * 不同的是:
         * StringBuffer是线程同步的。通常用于多线程。
         * StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。
         * 
         * jdk升级:
         * 1,简化书写。
         * 2,提高效率。
         * 3,增加安全性。

public class StringBuilderDemo {

	public static void main(String[] args) {
		
	}

}

class StringBuffer jdk1.0
{
	object lock;
	public   StirngBuffer append(int x)
	{
		synchronized(lock)
		{
		}
	}

	public synchronized 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、付费专栏及课程。

余额充值