String类、StringBuffer缓冲区、基本类型包装类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、String类

1.字符串时一个特殊的对象,字符串一旦被初始化,就不可以被改变;

(1)比较两种写法:

String s1="abc";

String s2 = new String("abc");

s1在内存中是一个对象;

s2在内存中是两个对象;new是一个对象,“abc”是一个对象

记住:String s2=new String() 等效于String s = ""; 不等效String s = null;

(2)比较三种结果

String s1="abc";

String s2 = new String("abc");

String s3="abc";

 

s1==s2;   false 原因:s1、s2是两个对象

s1.equals(s2);  true 原因:String类复写了Equals方法,该方法判断字符串是否相同

s1==s3;  true 原因:建立s1对象后,又建立一个s3,发现常量池中,已经有abc字符串,为了节约内存,直接把S3的引用指向和s1同一个对象;

2.String类适用于描述字符串事物;
那么他就提供了多个方法对字符串进行操作;
常见的操作:
1.获取;
  1.1 字符串中的包含的字符数,也就是字符串中的长度;
      int length();获取长度;
  1.2 根据位置获取位置上某个字符。
      char charAt(int index);
  1.3 根据字符获取该字符在字符串中的位置。
      int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。
      int indexOf(int ch,int fromIndex)从fromIndex指定的位置开始;
   

      int indexOf(String str)返回的是str在字符串中第一次出现的位置;
      int indexOf(String str,int fromIndex)从fromIndex指定的位置开始;

      int lastIndexOf(int ch) 反向查找;
2.判断;
   2.1字符串中是否包含某一个子串;
      boolean contains(str)
      特殊之处:indexOf(str)可以索引str第一次出现位置,如果返回-1,表示该字符串中存在。所

以,也可以用于对指定判断是否包含。if(str.indexOf("a")!=-1),
      而且该方法即可以判断,又可以获取出现的位置。
   2.2字符串是否有内容;
      boolean isEmpty();原理就是判断长度是否为零; "" 对象null 空
   2.3字符串是否是以指定内容开头;
      boolean startWith(str);
   2.4字符串是否是以指定内容结束;
      boolean  endWith(str);
   2.5判断字符串内容是否相同,复写了object类中的equals方法
      boolean equals(str);
   2.6判断内容是够相同,并忽略大小写;
      boolean equalsIgnoreCase();

3.转换。
3.1将字符数组转成字符串;
   构造函数:String(char[])
             String(char[],offset,count);将字符数组中的一部 分转成字符串;
   静态方法:
             static String copyValueOf(char[])
             static String copyValueOf(char[] data,int offset,int count)

             static String valueOf(char[])
3.2将字符串转成字符数组;
   char[] toCharArray();

3.3将字节数组转成字符串;
    String(byte[])
    String(byte[],offset,count)

3.4将字符串转成字节数组;
    byte[] getByte();
3.5将基本数据类型转成字符串;、
   static String ValueOf(int)
   static String valeuOf(double)
   //3+""//String.valueOf(3)
   特殊:字符串和字节数组在转换过程中,是可以指定编码表的;

4.替换;
   String replace(oldchar,newchar)
5. 切割
String[] split(regex)
6.子串 获取字符串中的一部分;
String subString(begin,end);
7.转换,去除空格,比较;
  7.1将字符串转成大写或者小写;
   String toUpperCase()
   String toLowerCase()
  7.2将字符串两端的多个空格去除;
   String trim()
  7.3将两个字符串进行自然顺序的比较; 
   int compareTo(String anotherString)

巧记:判断存在contains,获取位置indexof,根据位置获取字符charat。
  

练习1

package day05;
/*
2.将一个字符串反转,将字符串中指定部分进行反转,
思路:
1.曾经学习过对数组的元素的反转;
2.将字符串编程数组;对数组进行反转
3.将反转后的数组编程字符串
4.只要将反转的部分的开始和结束为止作为参数传递即可
*
*/
public class StringTest{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	
	public static 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);
	}
	
	
	public static void main(String[] args) {
		
		String str="   abc     ";
		sop(myTrim(str));
	}

}


 练习2

package day05;
/*
2.将一个字符串反转,将字符串中指定部分进行反转,
思路:
1.曾经学习过对数组的元素的反转;
2.将字符串编程数组;对数组进行反转
3.将反转后的数组编程字符串
4.只要将反转的部分的开始和结束为止作为参数传递即可
*
*/
public class StringTest2 {

	//反转字符串
		public  static String reverseString(String str,int start,int end)
		{
			
			char[] ch=str.toCharArray();
			
			reverseArr(ch,start,end);
			return new String(ch);
			
		}
		//反转字符串中的一部分
		public  static String reverseString(String str)
		{
			return reverseString(str,0,str.length()-1);
		}
		//反转字符数组
		public static void reverseArr(char[] ch,int x,int y)
		{
			for(int start =x,end =y-1;start<end;start++,end--)//一般查数包含头不包含尾,所以end=y-1
				swap(ch,start,end);
		}
		//交换两个字符的位置
		public static void swap(char[] ch,int x,int y)
		{
			//注意中间变量要用char类型
			char temp =ch[x];
			ch[x]=ch[y];
			ch[y]=temp;
					
		}
	public static void main(String[] args) {
		String str ="abcdie sl";
		System.out.println("反转全部字符串:"+reverseString(str));
		System.out.println("反转部分:"+reverseString(str,0,2));

	}

}

练习3.

package day05;

/**
 * 3.获取一个字符串在另一个字符串中出现的次数 "abkkdeddedkkskk" 
 * 思路: 1.低估一个计数器; 
 * 2.获取kk第一次出现的位置
 * 3.从第一次出现位置后剩余的字符串继续获取kk出现的位置, 每获取一次计数器加1
 * 4.当获取不到时,计数完成;
 */
public class StringTest3 {
	public static int getSubCount(String str, String key) {
		int count=0;
		int index=0;
		while((index=str.indexOf(key))!=-1)
		{
			//从第一次出现位置后剩余的字符串继续获取kk出现的位置, 每获取一次计数器加1
			str=str.substring(index+key.length());
			count++;
		}
		return count;
		
	}
	//方式二
	public static int getSubCount_2(String str, String key) {
		int count=0;
		int index=0;
		while((index=str.indexOf(key,index))!=-1)
		{
			//int indexOf(String str,int fromIndex)从fromIndex指定的位置开始;
			//每次改变位置即可,不用取子串
			index=index+key.length();
			count++;
		}
		return count;
	}
	

	

	public static void main(String[] args) {
		String str="abkkdeddedkks";
		int i=getSubCount_2(str, "kk");
		System.out.println(i);
	}

}

练习4

package day05;
/*
4.获取两个字符串中最大相同子串,第一个动作,将短的那个串进行长度递减的子串打印
“abcwerthelloyuipodef”
"cvhellohmn"
*/

public class StringTest4 {
	
	public static String getMaxSubString(String str1,String str2)
	{
		String max="",min="";
		//判断两个字符串长度大小
		max=str1.length()>str2.length()?str1:str2;
		min=(max==str1)?str2:str1;
		/*
	1.将短的字符串按照长度递减的方式获取到
	2.将每获取的子串去长串中判断是否包含
	如果包含,就找到了

*/		for(int x=0;x<min.length();x++)
		{
                      //长度减1,减1后的子串有多个;
                     for(int y=0,z=str2.length()-x;z!=min.length()+1;y++,z++)
			{
				String temp=str2.substring(y,z);
				if(max.contains(temp))
					return temp;
			}
		}
		return "";
		
	}
	public static void main(String[] arg){
		String str1="abcwerthelloyuipodef";
		String str2="cvhellohmn";
		System.out.println(getMaxSubString(str1, str2));
		
		
		
	}

}

二、 StringBuffer

StringBuffer是字符串缓冲区,用于存储数据的容器。
1.特点:
(1).长度的可变的。
(2).可以存储不同类型数据。
(3).最终要转成字符串进行使用。
(4).可以对字符串进行修改。
2.既然是一个容器对象。应该具备什么功能呢?
 (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)

(5)反转

StringBuffer reverse()

(6)将缓冲区中指定数据存储到指定字符数组中;

void getChar(int srcBegin,int srcEnd,char[] dst,int dsBegin)

2.jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder

不同的是:
 StringBuffer是线程同步的。通常用于多线程。
 StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

 jdk升级:
 (1)简化书写。
 (2)提高效率。
 (3)增加安全性。
三、基本数据类型

1.基本数据类型包装类

Int      integer

char  Character

其他的基本数据类型的包装类只要将首字母大写即可。

2.作用:将基本数据类型封装成对象,可以将基本数据类型和字符串之间做转化。

(1)基本数据类型转化成字符串

方法一:基本数据类型+""

方法二:基本数据类型. toString(基本数据类型);

如:Integer.toString(21)//将21整数变成"34";

(2) 字符串转化成基本数据类型

xxx a = Xxx.parseXxx(string)

如:int  a = Integer.parseInt("12");

(3)十进制转成其他进制

toBinaryString()

toHexString()

toOctalString()

(4)其他进制转成十进制

parseInt(String,radix)

如:Int a = Integer.ParseInt("3c",16)

(5)  自动装箱,拆箱

Integer  x = new Integer(5);

等价于:Integer x = 5;//自动装箱,new Integer;

x = x+2;//x进行自动拆箱,变成了int类型,和2运算,再将和进行装箱赋给x

 

练习1.

package day05;

/*
"11 -5 20 -6 32 95 -3"
要求对字符串中的数值进行排序。生成一个数值从小到大新字符串。
思路:1、将字符串切割为字符串数组
	  2、将字符串数组转换为整数类型数组
	  3、对整数类型数组进行冒泡排序
	  4、将排序后的整数类型数组转换为字符串
*/

public class  StringSort
{
	public static void main(String[] args) 
	{
		String s="11 -5 20 -6 32 95 -3";
		sop(s);
		

		sop(stringSort(s));
	}

	public static String stringSort(String s)
	{
		//将字符串切割成字符串数组
		String[] str=s.split(" ");

		//将字符串数组转换为整数类型数组
		int[] arr=stringToInt(str);
		
		// 对整数类型数组进行冒泡排序
		bubbleSort(arr);

		//将排序后的整数类型数组转换为字符串
		return intToString(arr).toString();
	}

	// 将字符串数组转换为整数类型数组方法
	private static int[] stringToInt(String[] str)
	{
		int[] arr=new int[str.length];
		for(int x=0;x<str.length;x++)
		{	
			arr[x]=Integer.parseInt(str[x]);

		
		}
	
		return arr;
	}
	
	//对数组进行冒泡排序
	private static void bubbleSort(int[] arr)
	{
		for (int x=0;x<arr.length ;x++ )
		{
			for (int y=0;y<arr.length-x-1; y++)
			{
				if(arr[y]>arr[y+1])
					swap(arr,y,y+1);
			}
		}
	}

	//交换数组中的两元素
	private static void swap(int[] arr,int x,int y)
	{

		int temp=arr[x];
		arr[x]=arr[y];
		arr[y]=temp;
	}
	
	//将整数类型数组存放到一个StringBuiler容器中
	private static StringBuilder intToString(int[] arr)
	{
		StringBuilder sb=new StringBuilder();
		for (int x=0;x<arr.length-1; x++)
		{	
			sb.append(arr[x]+" ");
		}
		sb.append(arr[arr.length-1]+"");

		return sb;
	}

	//打印字符串
	private static void sop(Object obj)
	{
		System.out.println(obj);
	}

	//遍历数组
	private static void sop(int[] arr)
	{
		for (int x=0; x<arr.length;x++ )
		{
			System.out.print(arr[x]+"\t");
		}
		System.out.println();
	}
}

 

 思考:、String和stringbuffer的区别?

String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象。特殊之处就在于:

Stings= new String();String s1=””;两种写法都是在创建对象,使用起来一样。

 字符串最大的特点就是:一旦被初始化就不可以被改变。

 

StringBuffer是一个容器,字符串的组成原理就是通过该类实现的。StringBuffer可以对字符串内容进行增删改查等操作,很多方法和String相同。

 

 

 

 

 

 

 

 

 

 


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值