在開發(fā)的過程中用到了字符串的替換, 本來覺得挺簡單的問題,卻總也解決不了。字符串明明是替換了,卻總也輸出不了正確結果,很是郁悶,到底是為什么呢?
先來看我的代碼: Newsdetials nt=(Newsdetials)ntIter.next(); System.out.println("新聞明細記錄 "+nt); String content=nt.getContent(); System.out.println("新聞的內容是 : "+content); //轉換字符串中的雙引號為單引號 content.replaceAll("\"","'"); System.out.println("替換后的字符傳是: "+content); 程序解釋: 程序的前部分是通過迭代器來遍歷新聞的明細記錄。 我的目的是想用雙引號來替換掉字符串中的單引號。 以上是我開始使用的方法,我輸出的結果是什么呢?也許你會和我當初的想法相同?輸出的是替換后的內容。 答案是錯的。輸出的內容和其替換前的內容相同。明明替換了,這是為什么呢?我也是好久都沒找到答案。 一個偶然的機會,讓我實現(xiàn)了我的目的。我的實現(xiàn)如下: Newsdetials nt=(Newsdetials)ntIter.next(); System.out.println("新聞明細記錄 "+nt); String content=nt.getContent(); System.out.println("新聞的內容是 : "+content); //轉換字符串中的雙引號為單引號 String content0=content.replaceAll("\"","'"); System.out.println("替換后的字符傳是: "+content0); 程序解釋: 這一段代碼看上去和前段相同,但卻實現(xiàn)了我的目的。 我很是不解,就看了一下源代碼,才發(fā)現(xiàn)其中的奧妙。我們分析一下上面的兩段程序: StringBuffer sb = new StringBuffer(); do { 看這一段代碼讓我們明白了一切(我只看懂了,確實有一個新的對象生成,并且返回了): 最后還要補充一點:String類的對象是不可更改的,叫做常量對象。所以replaceAll必定返回一個新的對象。以后再碰見字符串,并想要改變它的值,那么必定是產(chǎn)生了一個新的對象。 |
|
來自: soft_xiang > 《我的文章》