黑馬程序員-Java基礎---String、StringBuffer、StringBuilder、包裝類

第一講概述數組

一、  字符串是一個特殊的對象,它一旦被初始化,就不能夠被改變,不能有子類,因此String中的方法都不能被複寫;多線程

二、  字符串有兩種賦值方式app

1)  String s1 = 「abc」;  ——在內存中只有一個對對象。函數

2)  String s2 = new String(「abc」);——在內存中有兩個對象,」abc」是一個對象,new又建立了一個對象。ui

三、  equals方法編碼

Object中的equals方法是用於比較兩個對象的地址的,String類中重寫了該方法,使得其比較的是具體的對象的值。線程

 

 

第二講字符串經常使用功能對象

一、  字符串在內存中的特性blog

               

二、  操做字符串的方法接口

2.1 讀取方法

l  int length()——獲取字符串長度;

l  char charAt(int index)——根據位置獲取位置上某個字符;

l  int indexOf(int ch)——返回ch在字符串中第一次出現的位置;

l  int indexOf(int ch,int fromIndex)——從fromIndex指定位置開始,獲取ch在字符串中第一次出現的位置;

l  int indexOf(String str)——返回str在字符串中第一次出現的位置;

l  int indexOf(String str,int fromIndex)——從fromIndex指定位置開始查找,返回str在字符竄中第一次出現的位置;

l  int lastIndexOf(int ch)——返回ch自字符串中最後一次出現的位置

2.2   判斷操做

l  boolean contains(str)——判斷字符串中是否包含str;

l  boolean isEmpty();——判斷字符串中是否有內容。其原理是判斷字符串長度是否爲0;

l  Boolean startsWith(str)——判斷字符串是否以str開頭。

l  Boolean endsWith(str)——判斷字符串是否以str結尾。

l  Boolean equals(str)——判斷字符串內容是否相同。Object類中的equals方法。

l  Boolean equalsIgnoreCase(str)——判斷內容是否相同,而且忽略了大小寫。

2.3   字符串與其餘數據類型互相轉換

l  將字符串轉成字符串:

方法一:構造函數方法

String(char[] ch )

String(char[] ch,int offset,int count)——將字符串數組中的一部分轉成字符串。

                             方法二:靜態方法

                                               Static String copyValueOf(char[] ch)

                                               Static String copyValueOf(char[] , int offset, int count)

l  將字符串轉成字符數組

Char[]  toCharArray();

l  將字節數組轉成字符串——構造函數方法實現

String(byte[] b);

String(byte[] b,int offset , int count)

l  將字符串轉成字節數組

Byte[]  getBytes();

特殊狀況:字符串和字節數據在轉換過程當中,能夠指定編碼表。

l  將基本數據類型轉成字符串

Static String valueOf(int i)——將int類型數據轉成字符串

Static String valueOf(double d)——將double型數據轉成字符串

 

2.4   替換字符串中的某個字符

String replace(oldchar , newchar).

2.5   根據指定字符將字符串切割成多個字符串

String[] split(regex);

2.6   獲取字符串中的一部分

String substring(begin)——獲取字符串中從begin之後的全部字符。

String substring(begin , end)——獲取字符串中從begin(包含)開始到end(不包含)之間的字符。

2.7   大小寫轉換,去除空格,字符串天然順序比較

l  大小寫轉換

String toUpperCase()——將字符串轉成大寫;

String toLowerCase()——將字符串轉成小寫;

l  將字符串兩端的多個空格去除

    String trim();

l  對兩個字符串進行天然順序比較

    Int compareTo(String);——字符串重寫了Comparable接口中的compareTo方法。

練習:

一、  模擬一個trim方法,去除字符串兩端的空格

思路:

1)判斷字符串的第一個位置是否爲空,若是是繼續向下判斷,直到不是空格爲止;結尾處的空格判斷也是如此。

2)當開始和結尾都判斷到不是空格了,將先後兩處之間的字符取出來,達到去除字符串兩端空格的目的。

代碼實現以下:

二、  將一個字符串進行翻轉。將字符串中指定部分進行翻轉

三、  獲取一個字符串在另外一個祖父串中出現的次數

四、  獲取兩個字符串中最大相同字符串。

第三講 StringBuffer

一、  概述

StringBuffer是一個容器,咱們能夠對容器中的數據進行增、刪、改、查。當數據類型和數據個數不肯定時,並且最終要變成字符串的時候,就能夠用字符串緩衝區。

二、  特色

1)  長度能夠變化;

2)  能夠直接操做多個數據類型;

3)  最終會經過toString方法變成字符串;

三、  功能

1)  存儲

StringBuffer append()——將指定數據做爲參數添加到已有數據結尾處

StringBuffer insert(index,數據)——將數據插入到指定的位置(index);

2)  刪除

StringBuffer delete(int start,int end)——刪除緩衝區中的數據,包含start,不包含end;

StringBuffer deleteCharAt(index)——刪除指定位置的字符

3)  獲取

Char charAt(int index);——返回指定位置處的字符

Int indexOf(String str)——查找字符串str在容器中第一次出現的位置

Int lastIndexOf(String str)——查找字符串str在容器中最後一次出現的位置

Int length()——獲取容器的長度

String substring(int start, int end)——獲取緩衝區中從start(包含)到end(不包含)的數據。

4)  修改

StringBuffer repace(start,end,String)——利用string替換容器中從start(包含)到end(不包含)的數據。

Void setCharAt(int index, char ch)——將緩衝區中index位置處的數據替換成ch。

5)  反轉

StringBuffer reverse();

 

 

四、  StringBulder與StringBuffer

StringBulder是jdk1.5版本以後纔出現的,爲了提升單線程運行效率。它與StringBuffer的區別以下:

1)  StringBuffer是線程同步的,即,多線程調用時,對緩衝區中數據的操做代碼是同步的;而StringBulder是不一樣步的。

2)  StringBulder不須要判斷鎖(由於不一樣步),提升了運行效率,在單線程下建議使用StringBulder,多線程下建議使用StringBuffer。

 

 

第四講   基本數據類型對象包裝類

一、  概述

將基本數據對象及其操做進行包裝。

二、  基本數據類型包裝類的做用

包裝類的出現是爲了編譯對基本數據類型數據的操做,如,咱們能夠直接利用整形包裝類得到整形的最大數,也能夠利用包裝類中的方法直接將其餘類型數據轉換成整形。常見的基本數據對象類型包裝類對應以下:

三、  包裝類新特性

1)  十進制轉成其餘進制

toBinaryString()——將十進制轉成二進制;

toHexString()——將十進制轉成十六進制;

toOctalString()——將十進制轉成八進制;

2)  其餘進制轉成十進制

Integer.parseInt(String,radix)——其中radix爲基數,若sring爲二進制數,radix值爲2;若string爲十六進制數,radix爲16;若string爲八進制數,radix爲8;

3)  自動裝箱/拆箱

Interger x = 4;——這是一個自動裝箱的過程,等同於Integer x = new Integer(4);

x = x + 5;——這句話經歷了自動拆箱和和裝箱的過程。等號右邊的x是一個引用類型數據,在運算時,自動變成int類型與5相加,而後再進行裝箱,賦給等號左邊的x。

4)  Integer對象在內存中的存儲

Integer m = 127;

Integer n = 127;

System.out.println(m == n);//結果是true

 

Integer a = 128;

Integer b = 128;

System.out.println(a == b);//結果是false

形成以上結果不一樣的緣由是:當數值在byte範圍內(整形小於等於127)時,對於新特性,若是該數值已經存在,則不會再開闢新的空間,即m和n指向了同一個對象。

 

 

總結

一、String和StringBuffer區別

1)String和StringBuffer都有對字符串進行增刪改查等操做;

2)String長度和內容都不可變,StringBuffer長度和內容均可變;

3)StringBuffer有反轉功能;

二、StringBuffer和StringBuilder的主要區別

         1)StringBuffer線程同步,StringBuilder線程不一樣步;

         2)StringBuffer效率較低,StringBuilder效率較高;

         3)多線程時使用StringBuffer,單線程時使用StringBuilder;

三、基本數據類型對象包裝類

         1)方便了對基本數據的操做,若進制轉換、基本數據類型之間的轉換等;

         2)基本數據類型還有自動裝箱和拆箱功能;

相關文章
相關標籤/搜索