




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第六章JavaAPIString類和StringBuffer類System類和Runtime類Math類和Random類包裝類Date類、Calendar類和DateFormat類6.1String類和StringBuffer類6.2System類與Runtime類6.3Math類與Random類6.4包裝類6.5Date類、Calendar類與DateFormat類6.6JDK7新特性——switch語句支持字符串類型6.1String類和
StringBuffer類
6.1.1String類的初始化Java中定義了String和StringBuffer兩個類來封裝字符串,并提供了一系列操作字符串的方法,它們都位于java.lang包中,因此不需要導包就可以直接使用。String類的對象具有常量特性,即被創建后對象中的字符序列不能修改,而StringBuffer類的對象所占的內存空間可以變化,便于存放變化的字符串。在操作String類之前,首先需要對String類進行初始化。1、使用字符串常量直接初始化一個String對象,具體代碼如下:6.1String類和
StringBuffer類
6.1.1String類的初始化2、使用String的構造方法初始化字符串對象String類提供了多個構造方法,常用的有5個:可以通過一個字符串常量來構造一個字符串對象,也可以通過一個字符數組或者字節數組構造一個字符串對象。 (1)publicString(Stringstring) 例如:Strings=newString(“Hello”); (2)publicString(char[]value) 例如:char[]c={‘J’,’a’,’v’,’a’};Strings=newString(c);
(3)publicString(char[]value,intoffset,intcount)例如:char[]c={‘H’,’e’,’l’,’l’,’o’};Strings=newString(c,0,2);//s的值是“He”6.1String類和
StringBuffer類
6.1.1String類的初始化(4)publicString(byte[]bytes)例如:byte[]b={65,66,67,68,69,70};Strings=newString(b);//s的值是“ABCDEF”(5)publicString(byte[]bytes,intoffset,intlength)例如:byte[]b={65,66,67,68,69,70};Strings=newString(b,0,2);//s的值是“AB”字符串對象一旦創建,其內容不會發生改變,也就是說每一個字符串的實體都是一個常量。但是字符串的引用變量值可以改變:
Strings=“Java面向對象程序設計”;//變成垃圾對象
s=newString("JavaEE開發教程");6.1.1String類的初始化6.1String類和
StringBuffer類
6.1.1String類的初始化6.1String類和
StringBuffer類
6.1.2String類的常見操作6.1String類和
StringBuffer類
6.1.2String類的常見操作6.1String類和
StringBuffer類
6.1.2String類的常見操作1.字符串的基本操作在程序中,需要對字符串進行一些基本操作,如獲得字符串長度、獲得指定位置的字符等。可以看出,String類提供的方法可以很方便地獲取字符串的長度,獲取指定位置的字符以及指定字符的位置。6.1String類和
StringBuffer類
6.1.2String類的常見操作2.字符串的遍歷
6.1String類和
StringBuffer類
6.1.2String類的常見操作3.字符串相等String類重寫了Object類的equals()方法,實現字符串值相等判定,區分大小寫。而==運算符則用于判斷兩個對象是否為同一個對象實體。
6.1String類和
StringBuffer類
6.1.2String類的常見操作3.字符串相等有時候進行字符串相等比較時不區分字符大小寫,String類提供了忽略大小寫的相等判定方法equalsIgnoreCase()。
6.1String類和
StringBuffer類6.1.2String類的常見操作4.字符串的判斷操作操作字符串時,經常需要對字符串進行一些判斷,如判斷字符串是否以指定的字符串開始、結束,是否包含指定的字符串,字符串是否為空等。例程6-5中涉及到的方法都是用于判斷字符串的,并且返回值均為boolean類型。其中,equals()方法比較重要,該方法將父類Object中equals()方法進行了重寫。6.1String類和
StringBuffer類
6.1.2String類的常見操作 5.字符串的查詢操作操作字符串時,經常需要對字符串進行一些判斷,如判斷字符串是否以指定的字符串開始、結束,是否包含指定的字符串,字符串是否為空等。publicintindexOf(charc):在當前字符串中查找字符c,若找到則返回首次出現字符c的下標,否則返回-1。publicintindexOf(Strings):在當前字符串中查找字符串s,若找到則返回首次出現字符串s的首字符的下標,否則返回-1。publicintlastIndexOf(charc):返回字符c最后出現在當前字符串中的下標,否則返回-1。publicintlastIndexOf(Strings):返回字符串s在當前字符串中最后一次出現的首字符下標,否則返回-1。6.1String類和
StringBuffer類
6.1.2String類的常見操作 5.字符串的查詢操作
6.1String類和
StringBuffer類
6.1.2String類的常見操作 6.字符串的替換和去除空格操作程序開發中,用戶輸入數據時經常會有一些錯誤和空格,這時可以使用String類的replace()和trim()方法,進行字符串的替換和去除空格操作。6.1String類和
StringBuffer類
6.1.2String類的常見操作 6.字符串的替換和去除空格操作程序開發中,用戶輸入數據時經常會有一些錯誤和空格,這時可以使用String類的replace()和trim()方法,進行字符串的替換和去除空格操作。6.1String類和
StringBuffer類
6.1.2String類的常見操作 7.字符串的截?。ㄈ∽执┖头指钤赟tring類中針對字符串的截取和分割操作提供了兩個方法,其中,substring()方法用于截取字符串的一部分,split()方法可以將字符串按照某個一個字符串(可以是正則表達式)進行分割,并將分割的結果保存到一個字符串數組中。6.1String類和
StringBuffer類
6.1.2String類的常見操作 7.字符串的截取(取字串)和分割在String類中針對字符串的截取和分割操作提供了兩個方法,其中,substring()方法用于截取字符串的一部分,split()方法可以將字符串按照某個一個字符串(可以是正則表達式)進行分割,并將分割的結果保存到一個字符串數組中。6.1String類和
StringBuffer類
6.1.2String類的常見操作 7.字符串的轉換操作在程序開發中,經常需要對字符串進行轉換操作,例如將字符串轉換成數組的形式,將字符串中的字符進行大小寫轉換等。(1)字符串大小寫轉換Strings="Abc";
Strings1=s.toLowerCase();
Strings2=s.toUpperCase();則s1的值為"abc",s2的值為"ABC",s的值不變。(2)字符串轉化為數字:可以采用Integer類的intparseInt(Strings)方法,Byte、Short、Long、Float、Double類提供了相應的靜態方法,例如Double.parseDouble(Strings)。6.1String類和
StringBuffer類6.1.2String類的常見操作 7.字符串的轉換操作(3)數字轉化為字符串:用連接符+,還可以使用String類的方法valueOf(數值),或者使用Integer和Long類提供的靜態方法StringtoString(i,p),得到整數i的p進制的字符串表示。6.1String類和
StringBuffer類6.1.2String類的常見操作 7.字符串的轉換操作(4)字符串轉化為字符數組publicvoidgetChars(intbegin,intend,char[]dst,intdstBegin):將當前字符串的一部分復制到目標字符數組中。publicchar[]toCharArray():將此字符串轉換為一個新的字符數組,它的長度是此字符串的長度,它的內容被初始化為包含此字符串表示的字符序列。6.1String類和
StringBuffer類6.1.2String類的常見操作 7.字符串的轉換操作(4)字符串轉化為字符數組6.1String類和
StringBuffer類6.1.2String類的常見操作 7.字符串的轉換操作(5)字符串轉化為字節數組publicbyte[]getBytes():使用平臺的默認字符集將當前字符串轉換成字節數組。publicbyte[]getBytes(Charsetcharset):根據給定的字符集charset將當前字符串轉換到字節數組中。
6.1String類和
StringBuffer類6.1.2String類的常見操作 7.字符串的轉換操作(5)字符串轉化為字節數組6.1String類和
StringBuffer類腳下留心String字符串在獲取某個字符時,會用到字符的索引,當訪問字符串中的字符時,如果字符的索引不存在,則會發生StringIndexOutOfBoundsException(字符串角標越界異常)可以看出,訪問字符串中的字符時,不能超出字符的索引范圍,否則會出現異常,這與數組中的角標越界異常非常相似。多學一招統計一個字符串中每個字符出現的次數6.1.3正則表達式正則表達式就是一個字符串模板,可以包含普通字符和元字符。元字符就是描述字符的字符,比如上面的“.”就是匹配任意一個字符。6.1String類和
StringBuffer類
6.1.3正則表達式還可以用[]括起來的若干字符來表示一個字符,比如:
[abc]:abc任何一個字符;
[^abc]:除了abc以外的任何一個字符;
[a-z]:a到z的任何一個字母;
[.]:表示普通意思的點符號。正則表達式中還有模式限定符:6.1String類和
StringBuffer類
6.1.3正則表達式身份證號碼是15位數字或者18位數字組成的序列,所有正則表達式可以寫成“\\d{15}|\\d{18}”;QQ號碼最小是“10000”,正則表達式可以寫成“[1-9][0-9]{4,10}”;Email的正則表達式是“\\w*[.-_]\\w*@\\w*[.]\\w*”。String類提供了matches方法可以進行正則表達式驗證。6.1String類和
StringBuffer類
6.1.3正則表達式6.1String類和
StringBuffer類
6.1.3正則表達式Java還提供了專門進行模式匹配的庫類:Pattern類和Matcher類,它們位于java.util.regex包中。一般Pattern類和Matcher類聯合使用:1、先定義一個模式匹配字符串regex;2、通過Pattern類調用靜態方法compile(Stringregex)得到一個Pattern對象p;3、通過p對象調用matcher(CharSequenceinput)得到一個Matcher類對象m,其中input是要進行模式匹配的字符串;4、最后通過m對象調用模式匹配的方法,有find()方法、matches()方法、lookingAt()方法等方法。matches()方法判定input是否與regex完全匹配。6.1String類和
StringBuffer類
6.1.3正則表達式6.1String類和
StringBuffer類
6.1.3正則表達式String[]Split(Stringregex)方法示例:6.1String類和
StringBuffer類
多學一招簡單加密和解密程序6.1.4StringBuffer為了便于對字符串的修改,在JDK中提供了一個StringBuffer類(也稱字符串緩沖區)。StringBuffer類和String類最大的區別在于它的內容和長度都是可以改變的。StringBuffer類似一個字符容器,當在其中添加或刪除字符時,并不會產生新的StringBuffer對象。6.1String類和
StringBuffer類6.1.4StringBuffer6.1String類和
StringBuffer類6.1.4StringBuffer6.1String類和
StringBuffer類例程6-8中涉及到StringBuffer類的很多方法,其中append()和insert()方法是最常用的,并且這兩個方法有很多重載形式,它們都用于添加字符。不同的是,append()方法始終將這些字符添加到緩沖區的末尾,而insert()方法則可以在指定的位置添加字符。6.1.4StringBufferStringBuffer類和String類有很多相似之處,初學者使用時容易混淆。String類表示的字符串是常量,一旦創建后,內容和長度都是無法改變的。StringBuffer表示字符容器,其內容和長度都可以隨時修改。在操作字符串時,如果該字符串僅用于表示數據類型,則使用String類即可,但是如果需要對字符串中的字符進行增刪操作,則使用StringBuffer類。String類覆蓋了Object類的equals()方法,而StringBuffer類沒有覆蓋Object類的equals()方法。String類對象可以用操作符“+”進行連接,而StringBuffer類對象之間不能。6.1String類和
StringBuffer類
多學一招Scanner類可以使用掃描器類Scanner來解析字符串。Scanner類提供了一個構造器Scanner(Stringsource)
,構造一個新的Scanner對象,默認以空格為分隔符掃描指定字符串source。循環掃描時,可以通過hasNext()方法判定是否存在下一個待提取的數據。示例:測試Scanner類解析字符串。多學一招Scanner類如果想使用正則表達式匹配的字符串作為分隔符來掃描一個字符串,可以調用Scanner類提供的另一個方法ScanneruseDelimiter(Stringpattern),該方法將掃描器的分隔模式設置為pattern模式。例如:6.2System類與
Runtime類6.2.1System類System類對大家來說并不陌生,因為之前在打印結果時,使用的都是“System.out.println()”語句。這句代碼中就使用了System類。System類定義了一些與系統相關的屬性和方法,它所提供的屬性和方法都是靜態的,因此,想要引用這些屬性和方法,直接使用System類調用即可。System類定義了三個靜態屬性:out、in、err,分別表示標準的輸出流、輸入流和錯誤流。6.2.1System類1.getProperty()方法6.2System類與
Runtime類6.2.1System類2.getProperties()方法
System類的getProperties()方法用于獲取當前系統的全部屬性,該方法會返回一個Properties對象,其中封裝了系統的所有屬性,這些屬性是以鍵值對的形式存在。6.2System類與
Runtime類6.2.1System類3.currentTimeMillis()
currentTimeMillis()方法返回一個long類型的值,該值表示當前時間與1970年1月1日0點0分0秒之間的時間差,單位是毫秒,習慣性地被稱作時間戳。6.2System類與
Runtime類
6.2.1System類4.arraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)
arraycopy()方法用于將一個數組中的元素快速拷貝到另一個數組。其中的參數具體作用如下:src:表示源數組dest:表示目標數組 srcPos:表示源數組中拷貝元素的起始位置destPos:表示拷貝到目標數組的起始位置length:表示拷貝元素的個數需要注意的是,在進行數組復制時,目標數組必須有足夠的空間來存放拷貝的元素,否則會發生角標越界異常。6.2System類與
Runtime類
6.2.1System類4.arraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)
例程6-11中,創建了兩個數組fromArray和toArray,分別代表源數組和目標數組,當調用arraycopy()方法進行元素拷貝時,由于指定了從源數組中索引為2的元素開始拷貝,并且拷貝4個元素存放在目標數組中索引為3的位置,因此,在打印目標數組的元素時,程序首先打印的是數組toArray的前三個元素201、202、203,然后打印的是從fromArray中拷貝的四個元素。6.2System類與
Runtime類
6.2.2Runtime類
Runtime類用于表示虛擬機運行時的狀態,它用于封裝JVM虛擬機進程。每次使用java命令啟動虛擬機都對應一個Runtime實例,并且只有一個實例,因此該類采用單例模式進行設計,對象不可以直接實例化。若想在程序中獲得一個Runtime實例,只能通過以下方式:由于Runtime類封裝了虛擬機進程,因此,在程序中通常會通過該類的實例對象來獲取當前虛擬機的相關信息。6.2System類與
Runtime類
6.2.2Runtime類
例程6-12中,通過“Runtime.getRuntime()”方式創建了一個Runtime的實例對象,并分別調用該對象的availableProcessors()方法、freeMemory()方法和maxMemory()方法,將當前虛擬機的處理器個數、空閑內存數和可用最大內存數的信息打印出來。6.2System類與
Runtime類
6.2.2Runtime類
Runtime類中提供了一個exec()方法,該方法用于執行一個dos命令,從而實現和在命令行窗口中輸入dos命令同樣的效果。例程6-13中,調用了Runtime對象的exec()方法,并將系統命令"notepad.exe"作為參數傳遞給方法。運行程序會在桌面上打開一個記事本6.2System類與
Runtime類
6.2.2Runtime類
接下來通過一個案例來實現打開的記事本并在3秒后自動關閉例程6-14中,通過調用Process對象的destroy()方法,將打開的記事本關閉了。為了突出演示的效果,使用了Thread類的靜態方法sleep(longmillis)使程序休眠了3秒,因此,程序運行后,會看到打開的記事本在3秒后自動關閉了。6.2System類與
Runtime類
6.3Math類與
Random類6.3.1Math類Math類是數學操作類,提供了一系列用于數學運算的靜態方法,包括求絕對值、三角函數等。Math類中有兩個靜態常量PI和E,分別代表數學常量π和e。6.3Math類與
Random類6.3.1Math類生成驗證碼:6.3.2Random類在JDK的java.util包中有一個Random類,它可以在指定的取值范圍內隨機產生數字。6.3Math類與
Random類6.3.2Random類從運行結果可以看出,例程6-16運行兩次產生的隨機數序列是不一樣的。這是因為當創建Random的實例對象時,沒有指定種子,系統會以當前時鐘作為種子,產生隨機數。6.3Math類與
Random類6.3.2Random類接下來將例程6-16稍作修改,采用第二種構造方法產生隨機數從運行結果可以看出,當創建Random類的實例對象時,如果指定了相同的種子,則每個實例對象產生的隨機數具有相同的序列。6.3Math類與
Random類6.3.2Random類相對于Math的random()方法而言,Random類提供了更多的方法來生成各種偽隨機數。6.3Math類與
Random類6.3.2Random類模擬中國體育彩票36選7:6.3Math類與
Random類6.3.2Random類Random的nextInt(intn)方法可以生成一個[0,100)區間的隨機整數。在[0,100)區間共有100個整數,每個數字出現的概率都是1%。按照這個理論即可實現以一定概率執行某一程序。示例:模擬QQ農場,按照一定概率獲得莊稼種子。6.3Math類與
Random類6.4包裝類在Java中,很多類的方法都需要接收引用類型的對象,此時就無法將一個基本數據類型的值傳入。為了解決這樣的問題,JDK中提供了一系列的包裝類,通過這些包裝類可以將基本數據類型的值包裝為引用數據類型的對象。表中列舉了八種基本數據類型及其對應的包裝類。其中,除了Integer和Character類,其它包裝類的名稱和基本數據類型的名稱一致,只是類名的第一個字母大寫即可。6.4包裝類包裝類和基本數據類型在進行轉換時,引入了裝箱和拆箱的概念,其中裝箱是指將基本數據類型的值轉為引用數據類型,反之,拆箱是指將引用數據類型的對象轉為基本數據類型。例程6-19演示了包裝類Integer的裝箱過程,在創建Integer對象時,將int類型的變量a作為參數傳入,從而轉為Integr類型。由于Object類是所有類的父類,因此,第5行代碼通過調用toString()方法,成功將Integer的值以字符串的形式打印出來。6.4包裝類Integer類除了具有Object類的所有方法外,還有一些特有的方法:表中列舉了Integer的常用方法,其中的“intValue()”方法可以將Integer類型的值轉為int類型,這個方法可以用來進行拆箱例程6-20演示了拆箱的過程,Integer對象通過調用intValue()方法,將Integer對象轉為int類型,從而可以與int類型的變量a進行加法運算,最終將運算結果正確打印。6.4包裝類接下來通過一個案例實現在屏幕上打印“*”矩形,其中寬和高由運行時傳入的參數來決定。在運行例程6-21時,需要傳入參數寬和高,具體命令如下:在例程6-21中,程序運行時從鍵盤輸入了兩個參數,其中第一個參數作為矩形的寬度,第二個參數作為矩形的高度,由于鍵盤輸入的參數都是字符串類型,不能直接使用,因此,通過調用包裝類Integer的parseInt()方法將字符串轉為整數,從而實現了矩形的打印。6.4包裝類在使用包裝類時,需要注意以下幾點:包裝類都重寫了Object類中的toString()方法,以字符串的形式返回被包裝的基本數據類型的值。除了Character外,包裝類都有valueOf(Strings)方法,可以根據String類型的參數創建包裝類對象,但參數字符串s不能為null,而且字符串必須是可以解析為相應基本類型的數據,否則雖然編譯通過,但運行時會報錯。除了Character外,包裝類都有parseXXX(Strings)的靜態方法,將字符串轉換為對應的基本類型的數據。參數s不能為null,而且同樣必須是可以解析為相應基本類型的數據,否則雖然編譯通過,但運行時會報錯。6.5Date類、Calendar類
與DateFormat類6.5.1Date類在JDK的java.util包中提供了一個Date類用于表示日期和時間。Date類中大部分構造方法都被聲明為已過時,只有兩個構造方法是建議使用的,一個是無參的構造方法Date(),用來創建當前日期時間的Date對象。另一個是接收一個long型參數date的構造方法Date(longdate),用于創建指定時間的Date對象,其中date參數表示1970年1月1日0時0分0(稱為歷元)以來的毫秒數,即時間戳。6.5.1Date類例程6-22中,打印date1得到的是當前計算機的日期和時間,打印date2則是自1970年1月1日00:00:00以來966666666666l毫秒后的日期和時間。因此,大家可以根據需求選擇不同的方式創建Date對象。6.5Date類、Calendar類
與DateFormat類6.5.2Calender類Calendar類用于完成日期和時間字段的操作,它可以通過特定的方法設置和讀取日期的特定部分,比如年、月、日、時、分和秒等。Calendar類是一個抽象類,不可以被實例化,在程序中需要調用其靜態方法getInstance()來得到一個Calendar對象,然后調用其相應的方法,具體示例如下:最常用的方法是Date
getTime(),返回代表當前時間的Date對象。6.5Date類、Calendar類
與DateFormat類6.5.2Calender類利用Calender類獲取當前計算機的日期和時間:例程6-23中,調用Calendar的getInstance()方法創建一個代表默認時區內當前時間的Calendar對象。然后調用該對象的get(intfield)方法,通過傳入不同的常量字段值來分別得到日期、時間各個字段的值,特別需要注意的是,獲取的Calendar.MONTH字段值需要加1才表示當前時間的月份。6.5Date類、Calendar類
與DateFormat類6.5.2Calender類通過調用Calendar類的set()和add()方法來實現上述過程:例程6-24中調用Calendar的set()方法將日期設置為2008年8月8號,然后調用add()方法在Calendar.Date字段上增加100,從第10行的打印結果可以看出,增加100天的日期為2008年11月16日。6.5Date類、Calendar類
與DateFormat類6.5.3DateFormat類如果要將Date對象表示的日期以指定的格式輸出,例如輸出中文格式的時間,就需要用到DateFormat類。DateFormat類專門用于將日期格式化為字符串或者將用特定格式顯示的日期字符串轉換成一個Date對象。DateFormat是抽象類,不能被直接實例化,但它提供了靜態方法,通過這些方法可以獲取DateFormat類的實例對象,并調用其它相應的方法進行操作。在DateFormat類中定義了四個常量值用于作為參數傳遞給這些方法,其中包括FULL、LONG、MEDI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店直營店管理方案
- 卒中患者院前救治流程
- 幼兒園體育課教學培訓
- 清潔生產知識培訓材料
- 實施工廠生產線產能規劃指導原則
- 房屋院子租賃合同
- 校本教研制度培訓
- 電力行業設備維護保養預案
- 全新接送服務合同協議
- 油田鉆井工程技術操作規范
- 中藥湯劑課件完整版
- 新視野大學英語第三版讀寫教程第一冊unit1教學課件
- 如何做好我國新藥研發的市場篩選
- 房地產案例:商業街-鐵像寺水街
- 義務教育地理課程標準(2022年版)
- 于承惠雙手劍表格+文字行功歌訣
- 八年級物理下學期期中考試卷
- 火電廠鍋爐燃燒器結構圖
- 全過程工程咨詢服務大綱
- 鋼結構相關施工質量通病及預防措施
- 《認識三角形》第2課時示范公開課教學課件【七年級數學下冊北師大】
評論
0/150
提交評論