Java基礎String類和基本數據類型包裝類

String類

String類的特點:
1.字符串是一個特特殊的對象

2.字符串一旦初始化就不可以被改變

3.String s = “abc”; 存儲在字符串常量池中

4.存儲在池中的字符,沒有的就建立,有的就引用

注意:
1.

String s1 = "abc";//在字符常量池中創建一個對象“abc”

String s2 = new String("abc");//在堆中創建兩個對象:new、“abc”;

2.String類中的equals複寫了Object中的equals建立了String類自己的判斷字符串是否相同的依據===>其實就是比較字符串內容
(“==”比較的是等號兩方的地址值)

String s = new String(); 等效於 String s = “”; 不等效於 String s = null;

String類的構造函數:
//將byte數組中的一部分轉成字符串
String(byte[],int offset,int length,String charsetNmae)
//將字符數組中的一部分轉成字符串。
String(char[], int offset, int count)

在String類的(indexOf())方法中可以索引角標,獲取字符串。
相應角標的字符位置,我們可以通過-1來確定,該字符或者字符串是否存在

字符串的分割:
1.以字符對字符串進行分割
示例:

public class Test {

    /**
     * @param args
     * 以字符對字符串進行分割
     */
    public static void main(String[] args) {
        String s = "張三,李四,王五";
        String[] arr = s.split(",");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }

}

結果爲:

張三
李四
王五

2.將字符串切割爲字符數組
示例:

public class Test {

    /**
     * @param args
     * 將字符串切割爲字符數組
     */
    public static void main(String[] args) {
        String s = "asdsadsfgg";
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }

}

結果爲:

a
s
d
s
a
d
s
f
g
g

3.將字符串切割爲字節數組
public class Test {
示例:
/**
* @param args
* 以字節對字符串進行分割
*/
public static void main(String[] args) {
String s = “asdsadsfgg”;
byte[] arr = s.getBytes();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}

}

}
結果爲:

97
115
100
115
97
100
115
102
103
103

將字符串中的字母轉換成大小寫:

1.將字符串所有的字母轉換成大寫
示例:

public class Test {

    /**
     * @param args
     * 將字符串所有的字母轉換成大寫
     */
    public static void main(String[] args) {
        String s = "gHJlklkaSDd";
        System.out.println(s.toUpperCase());


    }

}

結果爲:

GHJLKLKASDD

2.將字符串所有的字母轉換成小寫
示例:

public class Test {

    /**
     * @param args
     * 將字符串所有的字母轉換成小寫
     */
    public static void main(String[] args) {
        String s = "gHJlklkaSDd";
        System.out.println(s.toLowerCase());


    }

}

結果爲:

ghjlklkasdd

字符串的替換:replace(oldchar,newchar) || replace(oldString,newString)方法
示例:

public class Test {

    /**
     * @param args
     * 字符串的替換
     */
    public static void main(String[] args) {
        String s = "aaaaa";
        System.out.println(s.replace('a','b'));


    }

}

結果爲:

bbbbb

trim()方法==》返回去除元字符串兩端空格的子字符串
示例:

public class Test {

    /**
     * @param args
     * 除元字符串兩端空格的子字符串
     */
    public static void main(String[] args) {
        String s = "   ABCDE   ";
        System.out.println(s);
        System.out.println(s.trim());


    }

}

結果爲:

   ABCDE   
ABCDE

模擬一個和trim()功能相同的方法:

public class StringText {

    /**
     * 模擬一個和trim()功能相同的方法
     * @param args
     */
    public static void main(String[] args) {
        /*當獲取到一個字符串後通過while和indexOf()方法*/
        String s = "   hjhkakakakakajsdvgfg    ";
        boolean flang = true;
        int index = -1;
        int lastIndex = s.length()+1;
        int count = 0;
        int lastCount = s.length();

        while(flang){
            if((index = s.indexOf(' ',index+1)) != -1){
                 count++;
//               System.out.println(count);
            }
            else{
                flang = false;
            }
        }
        flang = true;
        while(flang){
            if((lastIndex = s.lastIndexOf(' ',lastIndex-1)) != -1){
                lastCount--;
//              System.out.println(lastCount);
            }
            else{
                flang = false;
            }
        }

        String sw = s.substring(count,lastCount);
    System.out.println(sw);
    }

}

結果爲:

akakakakajsdv

concat()==》間接等於”+“

獲取字符串中字符的個數:length()方法

根據字符在字符串中第一次出現的位置獲取角標:

int indexOf(int ch)//獲取字符角標
int indexOf(int ch,int fromIndex)//從指定位置開始,獲取字符角標
int indexOf()//獲取字符串角標
int indexOf()//從指定位置開始,獲取字符串角標

根據字符在字符串中最後一次出現的位置獲取角標:

int lastIndexOf(int ch)//獲取字符角標
int lastIndexOf(int ch,int fromIndex)//從指定位置開始,獲取字符角標
int lastIndexOf()//獲取字符串角標
int lastIndexOf()//從指定位置開始,獲取字符串角標

獲取字符串中的一部分字符串(也叫子串):

substringint beginIndex,int endIndex)//子串從哪裏開始,到哪裏結束
substringint beginIndex)//子串從哪裏開始,到字符串尾端結束

示例:

public class Test {

    /**
     * @param args
     * 獲取字符串中的一部分字符串
     */
    public static void main(String[] args) {
        String s = "ABCDEFGHIJKLMN";


        //子串從哪裏開始,到哪裏結束
        System.out.println(s.substring(0,5));

        //子串從哪裏開始,到字符串尾端結束
        System.out.println(s.substring(3));


    }

}

結果爲:

ABCDE
DEFGHIJKLMN

判斷是否包含:caotains()方法
示例:

public class Test {

    /**
     * @param args
     * 判斷是否包含
     */
    public static void main(String[] args) {
        String s = "ABCDEFGHIJKLMN";

        System.out.println(s.contains("AB"));


    }

}

結果爲:

true

其他包含的方法:
startWith()==》字符串開頭是否包含
endWith()===》字符串結尾是否包含

比較字符串大小:compare()===》以ASCII碼值進行比較

intren():對字符串常量池進行操作;在字符串常量池在尋找需要的字符串,沒有就創建

StringBuffer:就是字符串緩衝區;用於存儲數據的容器
特點:
1.長度可變
2.可以存儲不同類型的數據
3.最終都轉換成字符串進行使用
4.可以對字符串內容進行修改

StringBuffer常用的操作方法:
1.添加
s(這裏代表一對象)
s.append(4).append(asd).append…=》可無限添加
(添加數據鏈,每添加一個代表一個獨立的字符串)

2.插入
s(這裏代表一對象)
s.insert(1,”haha“)=》1是插入的位置(位置從0開始),”哈哈“是插入的字符串(會將每個插入的字符串分割爲獨立的字符)

3.刪除
delete(start,end):包含頭,不包含尾
deleteCarAt(int index)=》刪除指定位置的元素

4.查找:charAt()=》依據角標查找字符
indexOf()=》依據字符查找角標(字符第一次出現的位置)
lastIdexOf()=》依據字符查找角標(字符最後一次出現的位置)

5.修改
replace(start,end,String)=》修改某段字符串內容(包含頭不包含尾)
void setCharAt(index,char)=》修改指定位置字符

其他方法;
設置串緩衝區長度:void setLength()=》當緩衝區中字符不夠長度,會自動填充空字符

將字符串緩衝區翻轉:reverse()方法。

StringBuffer的構造函數:
StringBuffer()==》初始容量爲16字節
StringBuffer(int capacity)==》自定義初始容量

JDK1.5出現StringBuiler

StringBuffer 和 StringBuilder 的區別:
StringBuffer線程安全。
StringBuilder線程不安全。

單線程操作,使用StringBuilder 效率高。
多線程操作,使用StringBuffer 安全。

StringBuffer 和 StringBuilder 的區別:
StringBuffer線程安全。
StringBuilder線程不安全。

單線程操作,使用StringBuilder 效率高。
多線程操作,使用StringBuffer 安全。

基本數據類型對象包裝類

用於描述基本數據類型值對象的類,就稱爲:基本數據類型對象包裝類

爲了方便操作基本數據類型值,將其封裝成了對象,在對象中自定義了屬性和行爲,豐富了該數據的操作

關鍵字 對應的類名
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
Boolean Boolean

Integer對象:
將int基本數據類型轉換爲基本數據類型對象包裝類:

int num = 4;
Integer i= new Integer(num);

字符串 轉換爲 基本數據類型對象包裝類:
xxxParseXxx(”xxx類型的字符串“)
注意:只有character沒有parse方法

如果字符串被Integer進行了對象的封裝,若想轉變成基本數據類型值,可以使用另一個非靜態的方法intValue()

基本類型 轉換爲 字符串
1.基本類型數值+”“
2.用String類中的靜態方法valueOf()
3.用Integer中的靜態方法valueOf()

十進制轉其他進制:
十進制轉成二進制:toBinaryString
十進制轉成八進制:toOctalString
十進制轉成十六進制:toHexString
十進制轉成人妖:toString(int num,int radix)

其他進制轉十進制:
Integer.Parseint(”值“,進制)

在jdk1.5版本後,對基本數據類型對象包裝類進行升級。
Integer i = new Integer(4); //1.5版本之前的寫法;
Integer i = 4; //自動裝箱,1.5版本後的寫法;

什麼時候自動裝箱?
當基本數據類型值賦值給了引用數據類型時,就會自動裝箱

什麼時候自動拆箱?
當引用數據類型值和基本數據類型值運算的時候,引用數據類型就會自動拆箱。

在自動裝箱時:如果裝箱的在一個字節大小以內則不會開闢新空間

練習:

public class StringText {

    /**
     * 給定一個字符串數組按照字典順序進行從大到小的排序 {"sad","wqre","cvcx","try","xcv","lkl"}
     * 
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 首先對給定的字符串進行分割裝載進String[]數組中
         * 然後通過雙層for循環和CompareTo()方法對String[]中的字符串進行排序然後輸出
         */
        String[] s = { "sad", "aqre", "acvcx", "try", "xcv", "lkl" };
        printarray(s);
        swap(s);
        printarray(s);
    }



    public static void printarray(String[] s) {
        System.out.print
        ("{");
        for (int i = 0; i < s.length; i++) {
            if(s[i] == s[s.length-1]){
                System.out.println(s[i]+"}");
                break;
            }

            System.out.print(s[i]+",");
        }
    }



    private static void swap(String[] s) {

        for (int i = 0; i < s.length; i++) {
            for (int j = i + i; j < s.length; j++) {
                if (s[i].compareTo(s[j]) > 0) {
                    String temp = s[i];
                    s[i] = s[j];
                    s[j] = temp;
                }
            }
        }

    }

}

結果爲:

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