本文說明
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,請返回替換後的字串。保證引數個數大於等於佔位符個數。保證原串由大小寫英文本母...