在 Dart 中查找和替换字符串

M. *_*thi 7 replace find 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);
  }
} 
Run Code Online (Sandbox Code Playgroud)

Ale*_*uin 13

你想要的可以用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);
}
Run Code Online (Sandbox Code Playgroud)

基本上,您将迭代映射条目(键/值对)。fold接受一个初始值(txt在您的情况下)和一个函数,用迭代的当前元素更新先前的值。每次迭代后,结果都会替换所有 ABV。


Sur*_*gch 11

对于根据问题标题来到这里的其他人,请使用replaceAll

final original = 'Hello World';
final find = 'World';
final replaceWith = 'Home';
final newString = original.replaceAll(find, replaceWith);
// Hello Home
Run Code Online (Sandbox Code Playgroud)