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

来源:互联网 发布:中华王电子烟 淘宝 编辑:程序博客网 时间:2024/05/29 14:30

------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-1swap(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出现的位置, 每获取一次计数器加1str=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