java語言程序設計8_第1頁
java語言程序設計8_第2頁
java語言程序設計8_第3頁
java語言程序設計8_第4頁
java語言程序設計8_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、語言程序設計 1第八章 字符串和文本I/O學習目標使用String類處理固定的字符串使用Character類處理單個字符使用StringBuilder/StringBuffer類處理可變字符串了解類String、StringBuffer和StringBuffer的區別學會如何將字符串通過命令行傳遞給main方法使用File類獲得文件的屬性、刪除和重命名文件使用PrintWriter類向文件寫數據使用Scanner類從文件讀數據2字符串類String構造一個字符串由于字符串使用頻繁,所以Java提供了創建字符串的快速初始化方法:例:String message1 = Hello World;St

2、ring message2 = new String(Hello World);String message3 = ;String message4 = new String();String stringRefVal = new String(stringLiteral);String stringRefVal = some string;3String對象是永久的(Immutable)String對象是永久的,它的內容不能改變下面的代碼能夠改變字符串的內容嗎:String str = Hello;str = World;:StringHellostr:StringHellostr:Stri

3、ngWorld可以看到,在執行 str = World 時,會產生一個新的字符串對象。4String類有15 個構造方法65 個方法詳細說明見 JDK 文檔5字符串長度使用 length() 方法得到字符串的長度:由于Java中字符串是用 Unicode 存儲的,因此 length() 得到的是 Unicode 字符的個數不管是中文、英文字符,每個字符長度都是 1注意:String 的 length() 是方法Array 的 length 不是方法String str1 = Long time no see;System.out.println(str1.length(); / 輸出 16St

4、ring str2 = 西安電子科技大學;System.out.println(str2.length(); / 輸出 8String str3 = 你out了;System.out.println(str3.length(); / 輸出 56獲得字符串中的單個字符使用 charAt(index) 方法如 message.charAt(5);索引從 0 開始,到 message.length()-1 (如果message長度不為0)注意,不能用 message5 Hello,worldmessageindicesmessage.charAt(0)012345678910message.char

5、At(10)message.length() is 117字符串連接兩種方法:使用 String 的 concat 方法字符串直接相加 (用+)多個字符串相加,支持連寫:String str1 = Hello;String str2 = World;String str3 = str1.concat(str2); / 方法一String str4 = str1 + str2; / 方法二String str = str1 + str2 + str3 + str4;String str = str1.concat(str2).concat(str3).concat(str4);8提取子串可以使用

6、charAt 方法從字符串中提取單個字符。也可以使用String 類中的substring 方法從字符串中提取子串。String message = Hello,world;String str = message.substring(0, 6) + Java;Hello,worldmessageindices012345678910message.substring(1, 5)message.substring(6)subString 有兩個方法:1) public String substring(int beginIndex, int endIndex) beginIndex: 開始點的

7、索引,包含本字符 endIndex: 結束點的索引,不包含本字符 得到從beginIndex到endIndex之間的子串2) public String substring(int beginIndex) beginIndex: 開始點的索引,包含本字符 得到從beginIndex開始直到字符串結束的字串9字符串比較:字符串是否相等使用 equals 方法,而不是 = :比較的是字符串對象引用的值,即判斷是否指向相同的對象equals() 方法:比較的是字符串的內容String str1 = new String(Hello,world);String str2 = Hello,world;S

8、ystem.out.println(str1 = str2); / 輸出 falseSystem.out.println(str1.equals(str2): / 輸出 truepublic boolean equals(Object anObject)說明: 比較兩個對象是否相等參數: anObject: 待比較的對象返回值: = true:說明相等 = false:說明不相等10字符串比較:比較大小compareTo() 方法public int compareTo(String anotherString)說明: 按照字典序來進行比較兩個字符串,如 abcd 0:說明 this anot

9、herString 0:說明 this anotherStringString str1 = new String(Hello,world);String str2 = Hello,world;String str3 = hello,world;System.out.println(pareTo(str2); / 輸出 0System.out.println(pareTo(str3): / 輸出一個負數注:String 有一個 compareToIgnoreCase() 方法,執行的是不區分大小寫的比較。11字符串轉換一旦字符串被創建之后它的內容就不能改變。但是可以使用以下方法將字符串轉換為新

10、字符串常用的轉換函數有:toLowerCase():轉換為全小寫toUpperCase():轉換為全大寫trim():去掉頭尾的空格replace(oldChar, newChar):將字符串中的 oldChar 用 newChar 來代替詳細說明請參見 JDK 文檔12在字符串中找到一個字符或子串用 indexOf() 方法public int indexOf(int ch);public int indexOf(int ch, int fromIndex);public int indexOf(String str);public int indexOf(String str, int f

11、romIndex);public int lastIndexOf(int ch);public int lastIndexOf(int ch, int fromIndex);public int lastIndexOf(String str);public int lastIndexOf(String str, int fromIndex);說明: 在本字符串中,查找一個字符/字符串。可以指定開始查找的位置。 indexOf:從前向后查找 lastIndexOf:從后向前查找返回值: indexOf: 得到第一次出現的位置。 lastIndexOf:得到最后一次出現的位置。 如果找不到,則返回

12、 -113Welcome to Java.indexOf(W); / returns 0.Welcome to Java.indexOf(x); / returns -1.Welcome to Java.indexOf(o, 5); / returns 9.Welcome to Java.indexOf(come); / returns 3.Welcome to Java.indexOf(Java, 5); / returns 11.Welcome to Java.indexOf(java, 5); / returns -1.Welcome to Java.lastIndexOf(a); /

13、returns 14.Welcome to Java.lastIndexOf(a, 13); / returns 12.Welcome to Java.lastIndexOf(Java, 5); / returns -1.messageindices012345678910 1112131414將字符和數字轉換成字符串使用 valueOf() 方法,能夠將字符和數字轉換成字符串public static String valueOf(boolean b);public static String valueOf(char c);public static String valueOf(char

14、 data);public static String valueOf(char data, int offset, int count);public static String valueOf(double d);public static String valueOf(float f);public static String valueOf(int i);public static String valueOf(long l);public static String valueOf(Object obj);說明: 將字符或數字轉換為字符串。返回值: 轉換后的字符串String str

15、1 = String.valueOf(5.44); / str1=5.44String str2 = String.valueOf(true); / str2=true15舉例:檢測回文串提示用戶輸入一個字符串,然后報告該串是否為回文串:如果從前向后讀它和從后向前讀它都一樣,則稱為回文串16import javax.swing.JOptionPane;public class CheckPalindrome public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:);

16、String output = ; if (isPalindrome(s) output = s + is a palindrome; else output = s + is not a palindrome; JOptionPane.showMessageDialog(null, output); public static boolean isPalindrome(String s) int low = 0; int high = s.length() - 1; while (low 0 的值 pareTo(new Character(f); / 返回一個 0 的值c.equals(ne

17、w Character(b); / 返回 falsec.equals(new Character(d); / 返回 true23舉例:統計字符串中的每個字母import javax.swing.JOptionPane;public class CountEachLetter public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:); int counts = countLetters(s.toLowerCase(); String output = ; for (in

18、t i = 0; i counts.length; i+) if (countsi != 0) output += (char) (a + i) + appears + countsi + (countsi = 1) ? timen : timesn); JOptionPane.showMessageDialog(null, output); public static int countLetters(String s) int counts = new int26; for (int i = 0; i s.length(); i+) if (Character.isLetter(s.cha

19、rAt(i) countss.charAt(i) - a+; return counts; 24String是Immutable的由于String的Immutable特性,因此每次對String的內容的修改,都會導致創建新的String對象如:String str = aa + bb + cc + dd一共創建了多少個String對象?答:7個:aa, bb, cc, dd, aabb, aabbcc, aabbccdd為了高效地進行字符串的“添加”、“插入”、“修改”操作,引入了StringBuffer/StringBuilder類25StringBuilder/StringBuffer類S

20、tringBuffer和StringBuilder功能類似:StringBuffer:線程安全的,在 JDK1.0 中引入StringBuilder:不是線程安全的,在 JDK1.5 中引入在單線程的程序中,StringBuffer和StringBuilder可以互換此處只介紹 StringBuffer26StringBuffer顧名思義,StringBuffer 封裝了一個字符串緩沖區,可以給字符串緩沖器中添加、插入或追加內容。使用方法和String類似。構造方法:/ 創建一個空的 StringBuffer,長度為 16public StringBuffer();/ 創建一個空的 Strin

21、gBuffer,長度為 capacitypublic StringBuffer(int capacity);/和string參數一樣的字符串。初始容量為 16 + str.length()public StringBuffer(String str);27追加新內容:用 append() 方法public StringBuffer append(boolean b);public StringBuffer append(char c);public StringBuffer append(char str);public StringBuffer append(double d);public

22、 StringBuffer append(float f);public StringBuffer append(int i);public StringBuffer append(long lng);public StringBuffer append(Object obj);public StringBuffer append(String str);public StringBuffer append(StringBuffer sb);StringBuffer sb = new StringBuffer();sb.append(Hello);sb.append( );sb.append(

23、World);String str = sb.toString();/ StringBuffer 支持連寫:sb.append(Hello).append( ).append(World);28舉例:忽略既非字母又非數字的字符,判斷是否為回文串public class PalindromeIgnoreNonAlphanumeric public static void main(String args) String s = JOptionPane.showInputDialog(Enter a string:); String output = Ignoring non-alphanumer

24、ic characters, nis + s + a palindrome? + isPalindrome(s); JOptionPane.showMessageDialog(null, output); public static boolean isPalindrome(String s) String s1 = filter(s); String s2 = reverse(s1); return s2.equals(s1); public static String filter(String s) StringBuffer strBuf = new StringBuffer(); fo

25、r (int i = 0; i s.length(); i+) if (Character.isLetterOrDigit(s.charAt(i) strBuf.append(s.charAt(i); return strBuf.toString(); public static String reverse(String s) StringBuffer strBuf = new StringBuffer(s); strBuf.reverse(); return strBuf.toString(); 29main 方法main 方法只是一個普通方法main方法與帶有參數的普通方法一樣。可以通過

26、傳遞實參來調用main方法例如,在B類中的main方法被A中的方法調用,如下所示:public class A public static viod main(String args) String strs = BeiJing, ShangHai, Xian; B.main(strs); public class B public static viod main(String args) for (int i=0; iargs.length; i+) System.out.println(argsi); 30main 方法又不是一個普通的方法它是Java執行程序的入口點String arg

27、s 參數,又稱為“命令行參數”命令行參數一般的格式:在main 方法中,是從args0, args1, ., argsn中得到參數,它們分別對應命令行中的 arg0, arg1, ., argnjava ApplicationName arg0 arg1 arg2 . argnJava解釋器程序名稱命令行參數31舉例:public class ArgsTest public static viod main(String args) for (int i=0; iargs.length; i+) System.out.println(argsi); 執行:java ArgsTest BeiJi

28、ng ShangHai Xian輸出:BeiJiongShangHaiXian32File類File類專門提供一種抽象,用于以獨立于平臺的方式處理大多數平臺依賴的、復雜的文件和路徑名問題。 File 類包含了文件名和目錄路徑33File的UML類圖(部分)34舉例:使用File類public class public static viod main(String args) java.io. = new java.io.File(image/up.gif); System.out.println(Does it exist? + (); System.out.println(Can it b

29、e read? + (); System.out.println(Can it be written? + (); System.out.println(Is it a directory? + (); System.out.println(Is it a file? + (); System.out.println(Is it absolute? + (); System.out.println(Is it hidden? + (); System.out.println(Absolute path is + (); System.out.println(Last modified on +

30、 new java.util.Date(); Does it exist? trueCan it be read? trueCan it be written? trueIs it a directory? falseIs it a file? trueIs it absolute? falseIs it hidden? falseAbsolute path is E:FreePPtechnologyAndroidprojectjava-testimageup.gifLast modified on Thu Aug 06 16:41:51 CST 200935文本IOFile對象封裝了文件或路

31、徑屬性,但是不包含從文件中讀寫數據的方法。為了進行I/O操作,需要用適當的Java I/O類創建對象,這些對象包含從文件中讀寫數據的方法。本節介紹使用Scanner和PrintWriter類從(向)文本文件中讀(寫)字符串和數值信息。36使用PrintWriter寫入數據37public class WriteData public static void main(String args) throws Exception java.io. = new java.io.File(scores.txt); if () System.out.println( exists); System.ex

32、it(0); java.io.PrintWriter output = new java.io.PrintWriter(file); output.print(zhangsan ); output.println(90); output.print(lisi ); output.println(85); output.close(); 輸出到當前目錄的 scores.txt 文件中,內容:zhangsan 90lisi 8538使用Scanner 讀取數據39public class ReadData public static viod main(String args) throws Exception java.io. = new java.io.File(scores.txt); java.util.Scanner input = new java.util.Scanner(file); while (input.hasNext() String name

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論