1. 程式人生 > >【JDK原始碼】String的replace方法原始碼解析--step by step

【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 IOCSpring:原始碼解讀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