[Дарт] Найти и заменить строки - PullRequest
0 голосов
/ 02 октября 2018

noob здесь: D Я использую флаттер для этого приложения, и у меня возникли проблемы с логикой приложения.Любая помощь очень ценится.

Цель приложения: Расшифровать (заменить) все вводимые аббревиатуры для слов следующим образом: - Пользователь вводит текст через текстовое поле - Приложение ищет любые сокращения (несколько) и заменяет аббревиатуру только текстом.

Я смог сделать несколько сокращений, но в моем случае все сокращения должны быть во входном тексте, иначе он не будет работать или второй индекс не будет работать.Я пробовал несколько способов, которые не работали, я использую 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);
  }
} 

Извините, если это кажетсятак просто, все еще учусь.

Спасибо

1 Ответ

0 голосов
/ 02 октября 2018

То, что вы хотите, можно довольно легко сделать с помощью 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.

...