一、String類的特點:
很多中語言都有對字符串的描述,以及功能的提供
String s= new String()的值就是空參數,即就是s=“”裏面沒有值;
String s=”abc” s是一個類類型對象,即“abc”就是一個對象;
只要是引號裏面的值都是類對象;
字符串的最大特點是,他是一個常量,一旦被初始化,就不可以被改變;;
即這個對象的內容一旦被初始化,就不會被改變,
但是注意,他的聲明被改變指向,不表示對象的值變了,只是變量的指向不同了;
聲明並不等於變量本身,只是一種指向而已;
String字符串是常量池的一部分;
String s2 = new String(“abc”) 這和上面的一種定義取值是一樣的;
String s1 = “abc”
String類判斷值相等只能用equals方法,因爲他重寫了Object類中的這個方法,定義了獨特的內容。即用來判斷這個String類中的字符串內容是否相同;不能用“==”。“==”表示地址值是否相同;
s1和s2有什麼區別:
s1在內存中有一個對象;s2在內存共有兩個對象;
常量池其實就是一個數組,需要什麼數值,他就把裏面的值取出來放在這個數組裏面;就是這麼一個過程,有相同的需要直接指向就行了,不需要再放,沒有就再放;
說明一下常量池是指這個內存裏的值都是固定不變的,不會變化,可以包含任何的類型,這是常量的定義,
二、String類中的方法;
String s1 = “abc”;String s2 = “abc”;在這裏s1==s2是真,因爲他們都是常量池的內容,並且常量池的特點是都是finally的,所以不會創建新的對象,直接指向其就可以了,那麼就相等了。
方法區數據裏有,類方法,靜態去,常量池,
常量池的數據是固定不變的,字符串就是在常量池當中;
String類是用於描述字符串事物,String類事物的特點肯定很自由他自己知道,他把他們都封裝起來,那麼他就對外提供了多個訪問方法對字符串進行操作;
常見的操作方法有哪些呢?
1、獲取
1.1字符串中的包含的字符數,也就是字符串的長度;
intlength():獲取長度;
數組也有長度,但是他是屬性,沒有括號,字符串的長度是方法有括號。
1.2根據位置獲取位置上的某個字符;
charcharAt(int index):
1.3根據字符獲取該字符在字符串中的位置
intindexOf(int ch):返回的是ch在字符串中第一次出現的位置;
intindexOf(int ch,int fromIndex):從fromIndex指定位置開始,獲取ch在字符串 中的出現的位置;
如果訪問到的字符串中不存在的腳標時,會發生指針異常;
如果沒有找到要指引的字符,那麼就返回-1;
intindexOf(String str):返回的是str在字符串中第一次出現的位置;
intindexOf(String str,int fromIndex):從fromIndex指定位置開始,獲取str在字 符串中的出現的位置;
注意,位置和數組的位置差不多,是從零腳標位置一樣;
反向索引:
lastIndexof();從最後一個數開始查找,提高查找效率;但是腳標不會發生改變;
1.5版本的新特性,基本數據類型的新特性,裝箱;即所有的對象都可以用Object類表示,基本數據類型也是;
2、判斷、
2.1字符串中是否包含某一個子串;
booleancontains(str);判斷字符串是否存在,是否包含;
特殊之處:indexOf(str)可以索引str第一次出現的位置,如果返回-1,表示str不在字符串中存在,所以也可以用於指定判斷是否包含;
if(str。indexOf(“aa”)!=-1)
而且該方法即可以判斷,又可以獲取出現的位置;
2.2字符串是否有內容;
booleanisEmpty();原理就是判斷長度是否爲0;注意“”和null是有區別的;
2.3字符串是否是以指定內容開頭;
booleanstartsWith(str);
2.4字符串是否是以指定內容結尾;
booleanendsWith(str);
以上四種可以用於查找文件夾中的某個文件類型或者名稱;
2.5判斷字符串內容是否相同,是複寫了Object類中的equals方法;
booleanequals (str);
2.6判斷內容是否相同,並忽略大小寫;
booleanequalsIsIgnoreCase();
3、轉換
3.1將字符數組轉成字符串
構造函數 String (char[]);
構造函數 String(char[],offset,count)將字符數組中的一部分轉成字符串;
構造函數就要先new一個實例纔可以;
靜態方法
staticString copyValueOf(char[] data)
staticString copyValueOf(char[] data, int offset, int count)
staticString valueOf(char[] data)
3.2將字符串轉成字符數組;(重點)
char[] toCharArray();沒有參數,因爲轉的對象就是字符串,裏面用的就是this,故省略
3.3將字節數組轉成字符串;
String(byte[]);
String(byte[],offset,count)將字節數組中的一部分轉成字符串;
3.4將字符串轉成字節數組;
byte[] getBytes();
3.5將基本數據類型轉成字符串;
staticString String valueOf(int)
staticString String valueOf(double)
//3+“”;//String.valueOf(3);兩種表達的結果是一樣的,這樣表達比較無聊;可以少用;
注意特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的;
但凡要做編碼操作,要變成字節才行,字符是不行的;
4、替換
字符間的替換String replace(oldchar,newchar);
注意,替換之後,得到的結果是一個新的字符串,即重新創建了一個新的對象;不是覆蓋了原來的字符串;
如果要替換的字符不存在,那麼返回來的值還是原串;
字符串的替換Stringreplace(CharSequence target, CharSequence replacement)
5、切割:
String[] split(regex); 可以把字符串分開的;
6、子串:獲取字符串中的一部分
String subString(begin);從指定位置開始到結尾;
String subString(begin,end);包含頭,不包含尾;
運用:s. subString(0,s.length())這種表達可以獲得整個字符串,因爲字符串最後一個腳標是length-1;
如果給出的腳標不存在,那麼就會出現腳標越界異常;
7、轉換,去除空格,比較:
7.1將字符串轉成大寫或者小寫;
StringtoUpperCase();轉大寫
StringtoLowerCare();轉小寫
7.2將字符串兩段的多個空格去處;
Stringtrim();
可能會因爲用戶多敲了一個空格會被誤解帳號被盜了;
7.3對兩個字符串進行自然順序的比較;
intcompareTo(String);
只比較第一個不同的字符進行排序;
三、字符串練習:
字符串方法必須要會,會到不借助api,不借助eclipse的功能,能手寫出來,才能說明你有開發經驗;否則誰都不信;
開發中,功能儘量細化出來,變成一個小的函數,而且方便修改,填充內容(抽象的思維),以及調用,
四、StringBuffer
StringBuffer緩衝區,String的字符串一旦初始化不能被改變,StringBuffer可以對字符串進行修改,StringBuffer是一個容器;
StringBuffer是字符串緩衝區,是一個容器;容器具備的特點就是對數據的改變;
所以StringBuffer應該有以下功能:存儲,刪除,獲取,修改
CURD create update read delete;
注意final類不能夠進行繼承;
1、存儲
StringBuffer append() 將指定數據作爲參數添加到已有數據結尾處;
這個方法返回來的還是本類對象,因此還可以繼續調用方法;
sb.append().append().append() 可以把結果作爲對象繼續引用本類方法;
存儲的一個方式或者添加的一種方式,因爲他訪問的對象是原緩衝區的對象;
因爲緩衝區是一個容器,所以添加數據後,還是是這個容器對象,雖然裏面數據變化了;
因爲這個容器就可以直接作爲一個對象。裏面的數據無論怎麼變化,這個容器還是這個對象;
StringBuffer insert(index,數據);可以將數據插入到指定index的位置;
緩衝區的特點就是可以不斷的往裏面添加數據,而最終用的時候都變成了一連串的字符串形式用;
StringBuffer是字符串緩衝期,是一個容器,而且長度是可變化的;並且可以操作多個數據類型;最終可以通過toString方法變成字符串;
2、刪除
StringBuffer delete (start,end):刪除緩衝區的數據,包含start,不包含end;
StringBuffer deleteCharAt(index):刪除指定位置的字符;
清空緩衝區的方法:sb.delete(0,sb.length());
3、獲取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
4、修改:把原來串中的數據改變一下;
StringBuffer replace(int start, int end,String str) 包含頭,不包含尾;
void setCharAt(int index, char ch) 把指定的位置替換爲某字符串;
5、反轉;StringBufferreverse()
以上的方法要熟記;
6、void getChars(int srcBegin, int srcEnd, char[]dst, int dstBegin)
將緩衝區中的指定數據存儲到指定的字符數組中;
五、StringBulider 在JDK1。5版本之後出現的;
StringBulider是線程不同步的;而StringBuffer是同步的;
StringBulider此類提供一個與 StringBuffer 兼容的,是可以替換的;多線程下StringBulider不同步,故不安全,而單線程StringBulider不需要判斷鎖,比StringBuffer性能更優;
當然,多線程,你也可以自己多線程用StringBulider,然後自己加一個鎖即可;
Java升級考慮三個方面,提高效率,簡化書寫,提高安全性;
建議以後開發就用Stringbuilder。這樣可以提高效率;
六、基本數據類型,對象包裝類;
一個類,他自己的特點和功能只有他自己最清楚,所以把他自己知道的各種功能都封裝起來;變成一個類;以後使用只需訪問之即可;
一切變成對象之後,指揮他就可以調用其所有工具了;
byte------Byte
short------Short
int---------Integer
long-------Long
float-------Float
double----Double
char-------Character
基本數據類型對象包裝類的最常見的作用,就是用於基本數據類型和字符串類型之間做轉換,即基本數據類型轉成字符串;字符串轉成基本數據類型;
基本數據類型轉字符串,兩種方法;
基本數據類型+“”;
Integer.toString();
字符串轉成基本數據類型:
static int parseInt(String s)
double=parseDouble();
Integer.parseInt();
布爾型的轉換
static boolean parseBoolean(String s)
boolean b = Boolean.parseBoolean(“true”)
parseInt(String s, int radix) 把其他進制形式轉爲十進制的數字;
把字符串轉爲int型的數據
除了上面的靜態方法外,還可以用對象調用方式
(new Integer(String s)). intintValue() 來轉換,用這種方式來返回int類型數據;
注意:equals方法在包裝類中,表示的是值相等;
Integer x= new Integer(123);
Integer y= new Integer(“123”);
x==y爲假,因爲兩個對象;x。equals(y)爲真;
JDK的新特性:
基本數據類型新建對象可以直接這麼寫:
Integer x = 123;這樣來建立一個對象,叫做自動裝箱;
x=x+2;這樣寫,是叫做自動拆箱;變成了int類型;
注意一點:新特性中x可以爲null,這樣參加運算就會Runtime異常拋出。所以用Integer來聲明時,一定要進行空值判斷;但是用int聲明就不需要;
Integer m=128;Integer n=128; m==n結果爲假,因爲兩個對象;
Integer x=127;Integer y=127; x==y結果爲真;因爲當數值在byte範圍內時,對於新特性,如果該數值已經存在,爲節約內存,則不會再開闢新的空間,新的聲明指向已有的對象;
int compareTo(Integer anotherInteger) 一個小方法;