我正在为此应用程序使用颤振,但我在应用程序的逻辑方面遇到了问题。任何帮助深表感谢。
应用程序目标:通过以下方式将所有输入的缩写解码(替换)为: - 用户通过文本框输入文本 - 应用程序查找任何缩写(几个)并仅用文本替换缩写。
我能够做到它会有一些缩写,但在我的情况下,所有缩写都应该在输入文本中,否则它不起作用或第二个索引不起作用。我尝试了几种不起作用的方法,我使用 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)
| 归档时间: |
|
| 查看次数: |
18097 次 |
| 最近记录: |