黑馬程序員-- Java基礎---> String類與包裝類


-                                 第一講  String類

一、String類概述   

  String類適用於描述字符串事物。每個用雙引號括起來的字符串都是String類的一個實例。字符串是一個特殊的對象。特殊之處就在於: Stings= new String();和String s1=””;兩種寫法都是在創建對象,使用起來一樣。

二、特點

 1、String是一個final的類型,即不可被繼承修改,一經初始化就終生不可改變。

 2、通過String創建的對象分別可存在於字符串池(StringPool)和堆內存中。

例:

String s1 = "abc";//s1是一個類類型變量, "abc"是一個對象。String s2 = new String("abc");//s1和s2有什麼區別? //s1在內存中有一個對象。//s2在內存中有兩個對象。new創建了一個,abc代表一個String s3 = "abc";//在常量池中尋找,故不重新開闢空間,s3和s1都指向“abc”System.out.println(s1==s2);//--->falseSystem.out.println(s1==s3);//--->trueSystem.out.println(s1.equals(s2));//--->true,因爲String類複寫了Object類中equals方法,該方法用於判斷字符串是否相同。



3、對常量池的理解---->StringPool(字符串池):
在java的內存分配中,存在着一個方法區,這裏有一個常量池,是存放那些常量等不變的值,StringPool即字符串池就是存在於這裏,它是一個存放字符串的公共存儲池。字符變量指向存儲池中的相應位置。如果是通過複製一個字符串變量,原始的字符串和複製的字符串將共享這個相同的字符串。


三、常見的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指定位置開始,獲取ch在字符串中出現的位置。

    int indexOf(String str):返回的是str在字符串中第一次出現的位置。
    int indexOf(String str, int fromIndex) :從fromIndex指定位置開始,獲取str在字符串中出現的位置。
    int lastIndexOf(int ch) :
2、判斷。
  2.1 字符串中是否包含某一個子串。
    boolean contains(str):
    特殊之處:indexOf(str):可以索引str第一次出現位置,如果返回-1.表示該str不在字符串中存在。
    所以,也可以用於對指定判斷是否包含。
    if(str.indexOf("aa")!=-1)
    而且該方法即可以判斷,有可以獲取出現的位置。
  2.2 字符中是否有內容。
    boolean isEmpty(): 原理就是判斷長度是否爲0. 
  2.3 字符串是否是以指定內容開頭。
    boolean startsWith(str);
  2.4 字符串是否是以指定內容結尾。
    boolean endsWith(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[]  getBytes():
  3.5 將基本數據類型轉成字符串。
    static String valueOf(int)
    static String valueOf(double)
    //3+"";//String.valueOf(3);
    特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。
4、替換
   String replace(oldchar,newchar);
5、切割
   String[] split(regex);
6、子串。獲取字符串中的一部分。
   String substring(begin);
   String substring(begin,end);
7、轉換,去除空格,比較。
  7.1 將字符串轉成大寫或則小寫。
   String toUpperCase();
   String toLowerCase();
  7.2 將字符串兩端的多個空格去除。
   String trim();
7.3 對兩個字符串進行自然順序的比較。
   int compareTo(string);
實例練習:

1、

/* 
需求:將一個字符串反轉 ,並能將字符串中指定部分進行反轉
思路:1、將字符串轉換爲字符數組 
    2、將數組反轉 
    3、將字符數組轉換爲字符串 
*/  
public class test01_ReverseString {
	
	public static void main(String[] args) {
		String s="abcd  efgh";  
        sop(s);  
//      ReverseString r=new ReverseString();  
//      sop(new ReverseString().reverseString(s)); 
        sop(ReverseString.reverseString(s));  //因爲方法靜態的,類直接調用
	}
	public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  

}
class ReverseString  
{  
      
    public static String  reverseString(String s,int start,int end)  
    {  
        //將字符串變爲字符數組  
        char[] chs=s.toCharArray();  
  
        //將數組進行反轉  
        charReverse(chs,start,end);  
          
        //將字符數組變爲字符串  
        return new String(chs);  
  
    }  
    //反轉整個字符串  
    public static String reverseString(String s)  
    {  
        return reverseString(s,0,s.length());  
    }  
      
    //反轉指定字符數組位置  
    private static void charReverse(char[] ch,int start,int end)  
    {  
        for (int x=start,y=end-1; x<y;x++,y--)  
        {  
            swap(ch,x,y);  
        }  
    }  
      
    //交換相應數組元素  
    private static  void swap(char[] ch, int start,int end)  
    {     
        char temp=ch[start];  
        ch[start]=ch[end];  
        ch[end]=temp;  
    }  
}  
結果爲

2、

import java.util.Arrays;

/* 
需求:對一個字符串中的字符進行自然排序 ,例如:"bdacxrtq" --> "abcdqrtx";
思路:        1、將字符串轉換爲字符數組。 
      2、對字符數組進行選擇、冒泡排序 
      3、將排好序的字符數組轉換爲字符串 
 
*/  
public class test02_SortString {

	public static void main(String[] args) {
		
		String s1 = "bdacxrtq";	
		System.out.println(s1);
		// 將字符串轉換成數組
		char[] ch = s1.toCharArray();		
		//定義一個對字符串進行排序的函數
		 sortString(ch);	 
		//將字數組轉換成字符串
		s1 = new String(ch);
		 System.out.println(s1);
	}
private static void sortString(char[] ch) {	
		//2 對數組進行排序
		Arrays.sort(ch);
		
	}

}
結果爲


3、

/* 
需求:獲取一個字符串在另一個字符串中出現的次數 
思路:1、定義一計數器 
      2、獲得字符串第一次在另個字符中出現的位置 
      3、從第一次出現的位置後剩餘的字符串中繼續獲取字符串出現的次數,每出現一次,計數器就加一次 
      3、當獲取不到時候,計數停止 
*/  

public class test03_CountString {
	
	public static void main(String[] args) {
		 String s="Live the life you love!!";  
	        sop("s="+s);       
	        sop("count="+countString(s,"ve"));  
	}
	public static int countString(String s,String key)  
    {  
        int count=0;//定義計數器  
        int index=0;//定義獲取角標變量  
        while((index=s.indexOf(key,index))!=-1)//如果包含,則繼續  
        {  
            index=index+key.length();//從找到的子串位置後一位開始獲取  
            count++;  
        }  
        return count;  
    }  
  
    private static  void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  
  
}
結果爲


4、

/* 
需求:獲取兩個字符串中最大相同子串 
思路:1、將短的一個字符串與長的進行比較,如果沒有,則將短串的字串按長度遞減的方式獲取 
    2、將每次獲取的子串,去長串中判斷是否包含,包含即找到。 
*/  
public class test04_MaxSubString {

	public static void main(String[] args) {
		String s1="HelloafsfWorldcgagb!";  
        String s2="fWorldafdffsfsfsfsfdc";  
        sop("s1="+s1);
        sop("s2="+s2);
        sop(getMaxSubstring(s1,s2));  
	}
	public static String getMaxSubstring(String s1,String s2)  
    {  
        String max,min;  
        max=(s1.length()>s2.length())?s1:s2;//判斷出大字符串  
        min=(max==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++)//依次遞減短字符串子串  
            {  
                String temp=min.substring(y,z);//獲取短字符串子串  
                if(max.contains(temp))//如果長串包含,則表示找到  
                    return temp;  
            }  
        }  
        return "沒有相同的字符串";  
    }  
  
    //打印輸出  
    public static void sop(Object obj)  
    {  
        System.out.println(obj);  
    }  

}
結果爲




                       第二講  StringBuffer類
一、概念

StringBuffer是字符串緩衝區。是一個容器。
二、特點
1,長度是可變化的。(數組是固定的)
2,可以字節操作多個數據類型。(數組只能操作一個)
3,最終會通過toString方法變成字符串。

三、常見操作方法
C create U update R read D delete
1,存儲。
StringBuffer append():將指定數據作爲參數添加到已有數據結尾處。
StringBuffer insert(index,數據):可以將數據插入到指定index位置。
2,刪除。
StringBuffer delete(start,end):刪除緩衝區中的數據,包含start,不包含end。
StringBuffer deleteCharAt(index):刪除指定位置的字符。
3,獲取。
char charAt(int index) 
int indexOf(String str) 
int lastIndexOf(String str) 
int length() 
String substring(int start, int end) 
4,修改。
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
5,反轉。
StringBuffer reverse();
6,將緩衝區中指定數據存儲到指定字符數組中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
,JDK1.5 版本之後出現了StringBuilder.
StringBuffer是線程同步。
StringBuilder是線程不同步。
以後開發,建議使用StringBuilder
升級三個因素:
1,提高效率。
2,簡化書寫。
3,提高安全性。
                     第三講  基本數據類型對象包裝類
一、基本數據類型對象包裝類。

byte Byte
short short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
基本數據類型對象包裝類的最常見作用,就是用於基本數據類型和字符串類型之間做轉換。
二、基本數據類型轉成字符串。
基本數據類型+""
基本數據類型.toString(基本數據類型值);
如: Integer.toString(34);//將34整數變成"34";
三、字符串轉成基本數據類型。
靜態:
xxx a = Xxx.parseXxx(String);
int a = Integer.parseInt("123");
double b = Double.parseDouble("12.23");
boolean b = Boolean.parseBoolean("true");
非靜態:
Integer i = new Integer("123");
int num = i.intValue();
四、十進制轉成其他進制。
toBinaryString();
toHexString();
toOctalString();
其他進制轉成十進制。
parseInt(string,radix);
五、JDK1.5版本以後出現的新特性:
自動裝箱和拆箱。
              Integer m = 128;
Integer n = 128;
sop("m==n:"+(m==n));//-->false
Integer a = 127;
Integer b = 127;
sop("a==b:"+(a==b));//結果爲true。因爲a和b指向了同一個Integer對象。
//因爲當數值在byte範圍內容,對於新特性,如果該數值已經存在,則不會在開闢新的空間。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章