簡體   English   中英

在 Dart 中查找和替換字符串

[英]Find and Replace Strings in Dart

我正在為此應用程序使用顫振,但我在應用程序的邏輯方面遇到了問題。 任何幫助深表感謝。

應用程序目標:通過以下方式將所有輸入的縮寫解碼(替換)為: - 用戶通過文本框輸入文本 - 應用程序查找任何縮寫(幾個)並僅用文本替換縮寫。

我能夠做到這會是一些縮寫,但在我的情況下,所有縮寫都應該在輸入文本中,否則它不起作用或第二個索引不起作用。 我嘗試了幾種不起作用的方法,我使用 2 個列表作為 abv 和相應的文本。

這是代碼。

List<String> coded = ["GM", "HOT", "YAH"]; //ABV list
List<String> decoded = ["Gmail", "Hotmail", "Yahoo"]; //corresponding list 
Map<String, String> map = new Map.fromIterables(coded, decoded);

String txt = "HOT was the best until GM took over"; //input text

void main() {
  if ((txt.contains(coded[0]))) { //GM
    String result = txt.replaceAll(coded[0], decoded[0]); //Replace with Gmail

    print(result);
  }
  else if ((txt.contains(coded[0])) && (txt.contains(coded[1]))) {
    String result = (txt.replaceAll(coded[0], decoded[0]));
    (txt.replaceAll(coded[1], decoded[1]));

    print(result);
  }
  else if ((txt.contains(coded[0])) && (txt.contains(coded[1])) && (txt.contains(coded[2]))) {
    String result = txt.replaceAll(coded[0], decoded[0]);
    txt.replaceAll(coded[1], decoded[1]);
    txt.replaceAll(coded[2], decoded[2]);

    print(result);
  }
  else {
    print(txt);
  }
} 

對於根據問題標題來到這里的其他人,請使用replaceAll

final original = 'Hello World';
final find = 'World';
final replaceWith = 'Home';
final newString = original.replaceAll(find, replaceWith);
// Hello Home

使用fold可以輕松完成您想要的操作:

List<String> coded = ["GM", "HOT", "YAH"]; //ABV list
List<String> decoded = ["Gmail", "Hotmail", "Yahoo"]; //corresponding list 
Map<String, String> map = new Map.fromIterables(coded, decoded);

String txt = "HOT was the best until GM took over"; //input text

void main() {
  final result = map.entries
    .fold(txt, (prev, e) => prev.replaceAll(e.key, e.value));
  print(result);
}

基本上,您將迭代映射條目(鍵/值對)。 fold采用一個初始值(在您的情況下為txt )和一個函數,用於使用迭代的當前元素更新前一個值。 每次迭代后,結果都替換了所有 ABV。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM