dart:字符串replace相關的方法

js中字符串有replace方法,通過正則表達式的修飾符可以用一個replace方法結合正則表達式實現各種方式的替換。

不過dart中對各種替換方式做了細分。需要另外注意的是,dart中字符串是不可變的對象,所有replace相關的方法都不會修改原 字符串,而是返回一個新字符串。

1. replaceAll

String replaceAll(pattern from,String replace)

replaceAll第一個參數是匹配符,可以是字符串也可以是正則表達式,第二個參數是要替換的字符串,返回值是一個新字符串。

  var a = 'a1b2c3a';
  var b = '123';
  print(a.replaceAll('a', '123')); //1231b2c3123
  print(b.replaceAll(RegExp(r'(\d)'), '111')); //111111111

2.replaceAllMapped

String replaceAllMapped(

Pattern from,

String replace(Match match)

)

replaceAllMapped第一個參數是匹配符,可以是字符串也可以是正則,第二個參數是一個函數,函數的參數捕獲到的字符串片段,其實就是對捕獲的字符串片段的一個映射,看函數名的mapped就能看的出來。

  var c = '123';
  var d = 'this is an apple';
  print(c.replaceAllMapped('2', (Match m) => '${m[0]}-${m[0]}-'));//12-2-3
  print(d.replaceAllMapped(RegExp(r'apple'), (Match m) => 'orange'));//this is an orange

3.replaceFirst

String replaceFirst(

Pattern from,

String to,

[int startIndex = 0]

)

replaceFirst第一參數是匹配符,可以是字符串也可以是正則,第二個參數是要替換的字符串,第三個參數可選,默認是0,。這個方法如果匹配到了多個字符串片段,那麼只會替換下標startIndex的那個捕獲片段,如果下標比捕獲的片段長度達,那麼將會報錯

  var d = '123';
  print(d.replaceFirst(RegExp(r'\d'), 'ccc', 1)); //1ccc3

4.replaceFirstMapped

String replaceFirstMapped(

Pattern from,

String replace(Match match),

[int startIndex = 0]

)

replaceFirstMapped和replaceAllMapped類似,替換捕獲到的字符串片段中startIdnex對應的那個片段,並通過第二個參數傳的函數進行轉換。

  var e = 'asd';
  print(e.replaceFirstMapped(RegExp(r'\w'), (Match m) => '${m[0]}${m[0]}', 2),);//asdd

5.replaceRange

String replaceRange(

int start,

int end,

String replacement

)

replaceRange第一個參數是開始下標,第二個參數是結束下標,第三個參數是要替換的字符串。替換的字符串包含開始下標,不包含結束下標,並且開始下標的數字要>=0,小於等於結束下標,結束下標的值要小於等於字符串長度,否則會報錯。

  var f = '123456789';
  print(f.replaceRange(1, 3, 'replace')); //1replace456789

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章