[英]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.