玩轉字串篇 替換的鬼斧神工

2021-10-07 23:14:45 字數 3703 閱讀 8110

本文說明

1.1.問題

今天遇到乙個問題,就是如何指定批量代換某些字串。

場景:比如下面一段markdown,寫文章時遇到很多固定的鏈結時,總是很長一段。

特別是**裡,感覺要崩潰啊,而且萬一哪天要換個**,乙個個改還不改瘋掉。

不行,得想個辦法,再怎麼說咱也是會敲些hello world**的人,逼格不能輸。

padding是乙個可以產生內邊距的控制項

詳情可見:![padding](

[container](有乙個padding屬性,

詳情可見![padding](

複製**

1.2.想法
我就想寫成下面的樣子,帶有$[***]的全給我自動換成相應的連線,看著也清爽,

所以咬個牙,搞一波,一勞永逸。最終結果是只要點一下,乙個資料夾裡所有markdown檔案都轉化。

padding是乙個可以產生內邊距的控制項

詳情可見:$[padding]

$[container]有乙個padding屬性,

詳情可見$[padding]

複製**

2.實現

2.1:字串匹配

首先要將$[***]中的***拿出來

string test="padding是乙個可以產生內邊距的控制項\n" +

"詳情可見:$[padding]\n" +

"$[container]有乙個padding屬性,\n" +

"詳情可見$[padding]";

parse(test);

private static void parse(string target)

}---->[列印結果]----

padding

container

padding

複製**

2.2:之後怎麼辦
到這裡卡殼了,感覺匹配出來也沒什麼用,在replace方法耗了些時間,然並卵

如果鏈結少的話replaceall乙個乙個換也行,但很多就有點恐怖了

然後看到matcher的end()方法,內心一喜,有索引似乎有搞頭,二話不說,存起來先

private static void parse(string target) 

}複製**

2.3:最終處理
除錯了一會,摸索到了乙個方法:

斷點可以將字串分為兩半,前段處理後再和後段拼在一起,這樣第乙個就ok了

然後處理拼成的字串,這有乙個問題:就是此時的斷點索引要偏移,

因為原先的字串已經改變了,當然這也難不倒聰明伶俐的我

private static void parse(string target) 

iterator> iterator = cutpos.entryset().iterator();

string temp;

int offset=0;

while (iterator.hasnext())

}複製**

然後一跑,大功告成,好了,正文即將開始

3.優化與封裝

好了,已經擁有核心科技,就差包個殼了

3.1:parser類
用於字串的解析,注意可以自定義符號,不過記得轉義

public class parser 

public parser(string symbol)

/*** 解析字串

* @param target 目標字串

* @param matchmap 匹配對映

* @return 處理後的字串

*/public string parse(string target, mapmatchmap)

iterator> iterator = cutpos.entryset().iterator();

string temp;

int offset=0;

while (iterator.hasnext())

return target;

}}複製**

3.2:檔案操作
對於我即將開源的flutter元件集專案,每個檔案裡都涉及到很多別的元件或屬性鏈結

所以我需要尋找乙個解決方法,不然乙個乙個套,感覺不太實際,而且眼花繚亂

最終導致寫**的心情不佳,所以來個批量檔案操作吧

public string parserfile(string path, mapmatchmap)

return parserfile(new file(path),matchmap);

}/**

* 根據檔案解析

* @param file 檔案

* @param matchmap 匹配對映

* @return

*/public string parserfile(file file, mapmatchmap)

} catch (exception e) finally

} catch (ioexception e)

}return parser(sb.tostring(),matchmap);

}複製**

3.3:資料夾批量檔案操作
ok,打完收工,現在可以開開心心寫md檔案了,字串操作真的很好玩

如果今後遇到什麼需要替換的,照這個思路來就ok了,避免不必要的勞動付出。

public void parserdir(string path, mapmatchmap) 

private void parserdir(file file, mapmatchmap)

for (file f : files) else }}

} else

}private void handlefile(mapmatchmap, file f) catch (ioexception e) finally

} catch (ioexception e)

}}/**

* 複製整個資料夾內容

* * @param oldpath string 原檔案路徑

* @param newpath string 複製後路徑

* @return boolean

*/public void copydir(string oldpath, string newpath)

for (int i = 0; i < file.length; i++) else

if (temp.isfile())

output.flush();

output.close();

input.close();

}if (temp.isdirectory())

}} catch (exception e)

}複製**

字串替換

描述輸入乙個字串,以回車結束 字串長度 100 該字串由若干個單詞組成,單詞之間用乙個空格隔開,所有單詞區分大小寫。現需要將其中的某個單詞替換成另乙個單詞,並輸出替換之後的字串。輸入輸入包括3行,第1行是包含多個單詞的字串 s,第2行是待替換的單詞a,長度 100 第3行是a將被替換的單詞b。長度 ...

字串替換

一 問題 函式宣告如下 char strreplace char str,char sub,char rep 其中str為原字串,sub為待被替換的子串。為簡單起見,假定字串sub和rep長度一樣 二 源 char strreplace char str,char sub,char rep if f...

字串替換

請你實現乙個簡單的字串替換函式。原串中需要替換的佔位符為 s 請按照引數列表的順序一一替換佔位符。若引數列表的字元數大於佔位符個數。則將剩下的引數字元新增到字串的結尾。給定乙個字串a,同時給定它的長度n及引數字元陣列arg,請返回替換後的字串。保證引數個數大於等於佔位符個數。保證原串由大小寫英文本母...