




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第9章字符串和文本I/O2動因我們經(jīng)常會遇到涉及字符串處理和文件輸入/輸出的問題。假設(shè)你需要編寫一個程序,該程序用一個新字替換文件中所有出現(xiàn)的某個字。你該如何實(shí)現(xiàn)這個功能呢?本章介紹字符串和文本文件,它們可以解決此類問題。3學(xué)習(xí)目標(biāo)使用String類處理定長的字符串(第9.2節(jié))。使用Character類處理單個字符(第9.3節(jié))。使用StringBuilder/StringBuffer類處理可變長字符串
(第9.4節(jié))。區(qū)別String、StringBuilder和StringBuffer類
(第9.2-9.4節(jié))。學(xué)習(xí)如何從命令行傳參數(shù)給main方法(第9.5節(jié))。使用File類獲取文件的屬性、刪除和重命名文件(第9.6節(jié))。使用PrintWriter類向文件寫數(shù)據(jù)(第9.7.1節(jié))。使用Scanner類從文件讀取數(shù)據(jù)(第9.7.2節(jié))。(GUI)使用對話框打開文件(第9.8節(jié))。4字符串類String創(chuàng)建一個字符串對象:Stringmessage="etoJava“;Stringmessage=newString("etoJava“);Strings=newString();獲取字符串長度和在一個字符串中獲取某個單個字符。字符串連接(concat)子串(substring(index)、substring(start,end))比較(equals、compareTo)字符串轉(zhuǎn)換在一個字符串中找出一個字符或一個子串字符串和數(shù)組之間的轉(zhuǎn)換將字符和數(shù)值轉(zhuǎn)換成字符串5創(chuàng)建字符串對象StringnewString=newString(stringLiteral);
Stringmessage=newString("etoJava");因?yàn)樽址褂梅浅nl繁,所以Java提供一種簡化的方法來初始化一個字符串對象:Stringmessage="etoJava";6字符串是不可變的String對象是不可變的;它的內(nèi)容是不能改變的。下列代碼會改變字符串的內(nèi)容嗎?Strings="Java";s="HTML";7跟蹤代碼
Strings="Java";s="HTML";動畫8跟蹤代碼
Strings="Java";s="HTML";動畫9限定字符串因?yàn)樽址诔绦蛟O(shè)計(jì)中是不可變的,但同時又會頻繁地使用,所以Java虛擬機(jī)為了提高效率和節(jié)約內(nèi)存,對具有相同字符串序列的字符串直接量使用同一個實(shí)例。這樣的實(shí)例被稱為限定的(interned)。例如:下面的語句10舉例程序結(jié)果顯示
s1==s是falses1==s3是true如果使用new操作符,就會創(chuàng)建一個新的對象。如果使用字符串初始化方法,如果限定對象已經(jīng)被創(chuàng)建則沒有新對象被創(chuàng)建。11跟蹤代碼動畫12跟蹤代碼13跟蹤代碼14字符串比較15字符串比較equals Strings1=newString("e“); Strings2="e";
if(s1.equals(s2)){//s1ands2havethesamecontents}
if(s1==s2){//s1ands2havethesamereference}16字符串比較(續(xù))compareTo(Objectobject) Strings1=newString("e“); Strings2="e";
if(pareTo(s2)>0){//s1isgreaterthans2}elseif(pareTo(s2)==0){//s1ands2havethesamecontents}else//s1islessthans217字符串長度、字符
以及組合字符串18獲取字符串長度使用length()方法獲取字符串的長度:message="e";message.length()(返回7)19在字符串中獲取單個字符不能使用message[0]使用message.charAt(index)下標(biāo)index從0開始20字符串連接Strings3=s1.concat(s2);Strings3=s1+s2;s1+s2+s3+s4+s5等價于(((s1.concat(s2)).concat(s3)).concat(s4)).concat(s5);21獲取子串22提取子串可以使用charAt方法從字符串中獲取單個字符,你也可以使用String類中的substring方法從字符串中提取子串。Strings1="etoJava";Strings2=s1.substring(0,11)+"HTML";23字符串的轉(zhuǎn)換、替換和分割24舉例“e”.toLowerCase()返回一個新字符串e?!癳”.toUpperCase()返回一個新字符串WELCOME?!癳”.trim()返回一個新字符串e?!癳”.replace(‘e’,‘A’)返回一個新字符串A。“e”.replaceFirst(“e”,“AB”)返回一個新字符串e?!癳”.replace(“e”,“AB”)返回一個新字符串AB?!癳”.replace(“el”,“AB”)返回一個新字符串e。25分割字符String[]tokens="Java#HTML#Perl".split("#",0);for(inti=0;i<tokens.length;i++)System.out.print(tokens[i]+"");JavaHTMLPerl顯示26依照模式匹配、替換和分割可以通過指定某個模式來匹配、替換或分割一個字符串。這是一種非常有用且功能強(qiáng)大的特性,通常稱之為正則表達(dá)式(regularexpression)。正則表達(dá)式對起步階段的學(xué)生講可能會比較復(fù)雜?;谶@個原因,本節(jié)只使用兩個簡單的模式。若要進(jìn)行進(jìn)一步的學(xué)習(xí),請參照補(bǔ)充材料III.F“正則表達(dá)式”。"Java".matches("Java");"Java".equals("Java");"Javaisfun".matches("Java.*");"Javaiscool".matches("Java.*");27依照模式匹配、替換和分隔方法replaceAll、replaceFirst和split也可以和正則表達(dá)式結(jié)合在一起使用。例如:下面的語句中用字符串NNN替換“a+b$#c”中的$、+或者#,然后返回一個新字符串。Strings="a+b$#c".replaceAll("[$+#]","NNN");System.out.println(s);這里的正則表達(dá)式[$+#]表示能夠匹配$、+或者#模式。所以,輸出是aNNNbNNNNNNc。
28依照模式匹配、替換和分隔下面的語句將字符串分隔為由標(biāo)點(diǎn)符號分隔開的字符串?dāng)?shù)組。String[]tokens="Java,C?C#,C++".split("[.,:;?]");
for(inti=0;i<tokens.length;i++)System.out.println(tokens[i]);29找出字符串中的
某個字符或者某個子串30找出字符串中的
某個字符或者某個子串“etoJava”.indexOf(‘W’)返回0。“etoJava”.indexOf(‘x’)返回-1?!癳toJava”.indexOf(‘o’,5)返回9?!癳toJava”.indexOf(“come”)返回3?!癳toJava”.indexOf(“Java”,5)返回11?!癳toJava”.indexOf(“java”,5)返回-1?!癳toJava”.lastIndexOf(‘a(chǎn)’)返回14。
31將字符和數(shù)字轉(zhuǎn)換成字符串String類提供了幾個靜態(tài)的valueOf方法能夠?qū)⒆址⒆址麛?shù)組和數(shù)值轉(zhuǎn)換成字符串。這些方法都有同樣的名字valueOf,但有不同類型的參數(shù)類型:char、char[]、double、long、int和float型。例如:為了將一個double值轉(zhuǎn)換為一個字符串,使用String.valueOf(5.44)。返回值是一個由字符“5”、“.”、“4”和“4”構(gòu)成的字符串。32問題:找出回文串目的:檢測一個字符串是否是回文串:從前向后和從后向前讀都是同一個字符串的字符串。CheckPalindromeRun33Character類34舉例CharactercharObject=newCharacter('b');pareTo(newCharacter('a'))返回1pareTo(newCharacter('b'))返回0pareTo(newCharacter('c'))返回-1pareTo(newCharacter('d')返回–2charObject.equals(newCharacter('b'))返回truecharObject.equals(newCharacter('d'))返回false35問題:統(tǒng)計(jì)字符串中
每個字母的出現(xiàn)次數(shù)這個例子給出一個程序,統(tǒng)計(jì)在忽略字母大小寫的情況下,字符串中每個字母出現(xiàn)的次數(shù)。CountEachLetterRun36StringBuilder/StringBuffer類StringBuilder/StringBuffer類是可以替代String類的另一種處理字符串的解決方案。一般來說,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer類。StringBuilder/StringBuffer類比String類更靈活。你是可以給一個StringBuilder或StringBuffer中添加、插入或追加新的內(nèi)容,但是String對象一旦創(chuàng)建,它的值就確定了。37StringBuilder的構(gòu)造方法38修改生成器中的字符串39舉例stringBuilder.append("Java");stringBuilder.insert(11,"HTMLand");stringBuilder.delete(8,11)將生成器變?yōu)閑Java。stringBuilder.deleteCharAt(8)將生成器變?yōu)閑oJava。stringBuilder.reverse()將生成器變?yōu)閍vaJotemocleW。stringBuilder.replace(11,15,“HTML”)將生成器變?yōu)閑toHTML。stringBuilder.setCharAt(0,‘w’)將生成器變?yōu)閑toJava。40toString、capacity、length、setLength和charAt方法41問題:忽略既非字母又非數(shù)字的
字符來判斷回文串這個例子給出一個程序,檢測一個字符串在忽略掉非字母和非數(shù)字的字符后,它是否是一個回文串。PalindromeIgnoreNonAlphanumericRun42main方法也就是一個普通的方法你可以通過傳遞實(shí)參來調(diào)用一個普通的方法。那能給main傳遞參數(shù)嗎?當(dāng)然可以。例如:在類B中的main方法是能被類A中的方法調(diào)用的,如下所示:43命名行參數(shù)classTestMain{ publicstaticvoidmain(String[]args){...}}javaTestMainarg0arg1arg2...argn44處理命名行參數(shù)在main方法中,從
args[0]、args[1]、...、args[n]中獲取參數(shù),它們分別對應(yīng)于命名行中的arg0、arg1、...、argn。45問題:計(jì)算器目的:編寫一個程序,完成整數(shù)的算術(shù)運(yùn)算。該程序接收三個參數(shù):一個操作符和兩個整數(shù)。CalculatorjavaCalculator2+3javaCalculator2-3RunjavaCalculator2/3javaCalculator2“*”346正則表達(dá)式正則表達(dá)式是一個字符串,它描述了匹配一組字符串的模式。正則表達(dá)式是一個功能強(qiáng)大的字符串操作工具??梢允褂谜齽t表達(dá)式匹配、替換和分割字符串。配套網(wǎng)站47匹配字符串"Java".matches("Java");"Java".equals("Java");"Javaisfun".matches("Java.*")"Javaiscool".matches("Java.*")"Javaispowerful".matches("Java.*")配套網(wǎng)站48正則表達(dá)式語法配套網(wǎng)站49替換和分割字符串配套網(wǎng)站50舉例Strings="JavaJavaJava".replaceAll("v\\w","wi");Strings="JavaJavaJava".replaceFirst("v\\w","wi");String[]s="Java1HTML2Perl".split("\\d");配套網(wǎng)站51File類File類特意提供了一種抽象,這種抽象是指以不依賴機(jī)器的方式來處理很多文件和路徑名依賴機(jī)器的復(fù)雜問題。文件名是一個字符串。File類是文件及其目錄路徑的一個包裝類。52獲取文件屬性和操作文件53問題:獲取文件屬性TestFi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 品評白酒面試題及答案
- 傷口評估與記錄試題及答案
- 工裝與工位器具管理制度
- 小兒喉異物的護(hù)理
- 暑假體育培訓(xùn)
- 2025年中國帕德爾球行業(yè)市場全景分析及前景機(jī)遇研判報(bào)告
- 指骨骨折病人護(hù)理常規(guī)
- 重癥哮喘病例討論與治療策略
- 終末期患者的心理護(hù)理與安寧療護(hù)實(shí)踐
- 基于新媒體環(huán)境下地方非物質(zhì)文化遺產(chǎn)的傳承
- 2024年荊州市江北地區(qū)檢察院招聘檢察輔助人員筆試真題
- 2025年高考真題-語文(北京卷) 含答案
- 山西焦煤集團(tuán)筆試題
- 星期音樂會智慧樹知到期末考試答案章節(jié)答案2024年同濟(jì)大學(xué)
- 精品灌溉引水工程施工組織設(shè)計(jì)
- 救護(hù)車注冊登記審批表
- 口腔頜面部手術(shù)的麻醉PPT學(xué)習(xí)教案
- 平衡與協(xié)調(diào)訓(xùn)練PPT課件
- 年普通高校(中專招生考生體格檢查表
- PEP英語(四下)-Unit-1-My-school--A-let's-learn教學(xué)反思
評論
0/150
提交評論