【JDK原始碼】String的replace方法原始碼解析--step by step
/*
* JDK 1.8
*
* @param oldChar the old character.
*
* @param newChar the new character.
*
* @return a string derived from this string by replacing every occurrence
* of {@code oldChar} with {@code newChar}.
*/
public String replace(char oldChar, char newChar) {
/* value 為當前字串物件的字元陣列名
如果新替換的字元與老字元相同,直接返回當前字串物件 */
if (oldChar != newChar) {
int len = value.length;// 獲取字串的長度
int i = -1;
char[] val = value; // 新建一個字元陣列val引用指向value字元陣列,用於
// 此while迴圈的目的是找出要被替換的第一個字元在字元陣列中的下標位置
while (++i < len) {
/* 當找到第一個被替換的字元時,跳出while迴圈
* 得到了下標i的值,也就是第一個要替換的位置
* 如果到最後沒有找到替換的值,那麼跳出迴圈,i的值將與len一樣
* 即不會進入下面的if判斷,直接返回當前字串
*/
if (val[i] == oldChar) {
break;
}
}
//當i的值比當前字串長度len小的時候
if (i < len) {
//使用當前字串的長度新建立一個字元陣列buf
char buf[] = new char[len];
//對下標在i之前的值不需要替換的字元迴圈賦值給新陣列buf
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
//此處迴圈是對字元進行替換
while (i < len) {
//沒有i++之前把先找到要替換的字元賦值給c
char c = val[i];
/*判斷從找到第一個要替換的字元以後 後面的字元是否有與老字元相同的,
如果有,那麼把相同的字元替變成新字元,並賦值給buf字元陣列
如果不相同,那麼就把老字元賦值到buf字元陣列中去。
*/
buf[i] = (c == oldChar) ? newChar : c;
//給i+1,直到i>=len,遍歷完val最後一個字元後 跳出迴圈
i++;
}
//把buf變成字串返回出去
return new String(buf, true);
}
}
return this;
}
水平有限,有問題請留言相告。
相關推薦
【JDK原始碼】String的replace方法原始碼解析--step by step
/* * JDK 1.8 * * @param oldChar the old character. * * @param newChar the new character. * * @re
【Android P】 JobScheduler服務原始碼解析(二) ——服務端啟動解析
JoScheduler服務框架分析 App端從建立一個job 到排程一個Job流程是怎樣的? Job在App端主要比較重要的類有四個:JobInfo,JobScheduler,JobService,JobServiceEngine public class Jo
【Redis基礎】客戶端原始碼解析
1.定義 Redis客戶端與伺服器之間通過TCP協議進行通訊。TCP協議是一種流式協議,資料以位元組流的形式進行傳遞,沒有固有的”報文”或”報文邊界”的概念,如果需要設定邊界,需要應用層自行處理。 2.原始碼 客戶端redis.h/redisClien
【專案原始碼】 Unity3D MMORPG原始碼+資源+服務端+資料庫
一、前言 本文轉自:GameRes遊資網 原文作者:zhihudaye 原文連結:https://bbs.gameres.com/forum.php?mod=viewthread&tid=307874&extra=page%3D1%26filter%3Dsortid%26
【JAVA,ArrayList原始碼】閱讀ArrayList原始碼個人理解
閱讀ArrayList原始碼個人理解 近期閱讀了java.util.ArrayList.java的原始碼 ArrayList介紹 從貼出程式碼不難看出,ArrayList是繼承了AbstractList,並且實現了List,RandomAccess,Cloneable,
【C語言】概述從原始碼到可執行檔案
自第一次輸出“hello world” 「原始碼如何變成可執行檔案」的問題就一直伴隨著我 本次以《程式設計師的自我修養—連結、裝載與庫》為參考,對這一過程做簡單總結 簡介 高階語言的出現使得程式設計師可以 儘量少考慮計算機本身的限制(如字長、記憶體大小、通訊方式
ArrayList集合(JDK1.8) 【集合框架】JDK1.8原始碼分析之ArrayList(六)
簡述 List是繼承於Collection介面,除了Collection通用的方法以外,擴充套件了部分只屬於List的方法。 常用子類 ?ArrayList介紹 1.資料結構 其底層的資料結構是陣列,陣列元素型別為Object型別,即可以存放所
【SpringMVC框架】前端控制器原始碼分析
前端控制器原始碼分析 雖然前面講了一些springmvc的入門程式和配置檔案中對映器和介面卡的配置,但是我們作為程式設計人員,瞭解框架的部分原始碼還是有必要的,比如前端控制器,它是如何通過Servlet的web.xml配置檔案實現攔截並跳轉至DispatcherServle
【Spring IOC】Spring:原始碼解讀Spring IOC原理
一、什麼是Ioc/DI? IoC 容器:最主要是完成了完成物件的建立和依賴的管理注入等等。 先從我們自己設計這樣一個視角來考慮: 所謂控制反轉,就是把原先我們程式碼裡面需要實現的物件建立、依賴的程式碼,反轉給容器來幫忙實現。那麼必然的我們需要建立一個容器
【自然框架】終於把原始碼弄到git上了。
好久沒寫部落格了,發現又從左面的排名裡掉出去了。 說來慚愧,一直說是開源,但是原始碼一直沒能放到git裡面。原因是,不會用。 最近終於把git弄明白了。把原始碼都放進去了。 剛興趣的話可以來看看。 名稱設定為 naturefw好了,不應該用jyk0011。有沒有知道怎麼改的
JDK中的native方法原始碼實現
java原始碼中的native方法是不能直接在jdk中看到的,因為jdk不是開源的,要看到的話需要sun授權才行,現在只有openjdk是被sun公司授權,所以要檢視的話,下載完整的OpenJDK原始碼包; 接下來裡面解壓後找到jdk目錄(也就是OpenJDK裡的大部分類庫的實現)的內容了。其中 src/
【Android實戰】----從Retrofit原始碼分析到Java網路程式設計以及HTTP權威指南想到的
一、簡介 接上一篇【Android實戰】----基於Retrofit實現多圖片/檔案、圖文上傳 中曾說非常想搞明白為什麼Retrofit那麼屌。最近也看了一些其原始碼分析的文章以及親自查看了原始碼,發現其對Java網路程式設計及HTTP權威指南有了一個很好的詮釋
【資料結構】8.java原始碼關於HashMap
1.hashmap的底層資料結構 眾所皆知map的底層結構是類似鄰接表的結構,但是進入1.8之後,連結串列模式再一定情況下又會轉換為紅黑樹在JDK8中,當連結串列長度達到8,並且hash桶容量超過64(MIN_TREEIFY_CAPACITY),會轉化成紅黑樹,以提升它的查詢、插入效率底層雜湊桶的資料結構是陣
【資料結構】9.java原始碼關於HashTable
1.hashtable的內部結構 基礎儲存資料的hash桶由Entry結構的陣列存放而entry資料結構,有hash,key和value,還有一個指向下一個節點的引用next物件 這裡就和hashmap中的資料結構不一樣了,hashmap中的資料結構是node,雖然結構上差不多,
【資料結構】10.java原始碼關於LinkedHashMap
目錄 1.LinkedHashMap的內部結構 2.LinkedHashMap建構函式 3.元素新增策略 4.元素刪除 5.元素修改和查詢 6.特殊操作 7.擴容 8.總結 1.LinkedHashMap的內部結構 物件的內部結構其實就是hashmap的內部結構,但是比hash
【ZooKeeper系列】3.ZooKeeper原始碼環境搭建
前文閱讀: 【ZooKeeper系列】1.ZooKeeper單機版、偽叢集和叢集環境搭建 【ZooKeeper系列】2.用Java實現ZooKeeper API的呼叫 在系列的前兩篇文章中,介紹了ZooKeeper環境的搭建(包括單機版、偽叢集和叢集),對建立、刪除、修改節點等場景用命令列的方式進行了測試,讓
【Ensemble methods】組合方法&集成方法
zed 加權 最好 rdquo ear 整合 表示 ensemble st算法 機器學習的算法中,討論的最多的是某種特定的算法,比如Decision Tree,KNN等,在實際工作以及kaggle競賽中,Ensemble methods(組合方法)的效果往往是最好的,
【Python初學者】使用方法修改字符串的大小寫
Python【Python初學者】使用方法修改字符串的大小寫
【Python初學者】使用方法刪除字符串中的空白
Python如圖顯示如下: 【Python初學者】使用方法刪除字符串中的空白
【3.26】抽象方法,接口
gpo 方法 關鍵字 extend 銷售 blog end 不能 xxx 【2018-03-26 18:54:48】 抽象方法: 抽象方法的註意事項:必須聲明在抽象類中,抽象方法沒有方法體,只有方法的聲明,需要用abstract關鍵字進行修飾。示例如下: abstra