このアプリにフラッターを使用していますが、アプリのロジックに問題があります。どんな助けでも大歓迎です。
アプリの目標:入力したすべての略語を次の方法で単語にデコード(置換)します。-ユーザーがテキストボックスを介してテキストを入力します-アプリは略語を探し(いくつか)、略語をテキストのみに置き換えます。
私はそれをいくつかの省略形で行うことができましたが、私の場合、すべての省略形は入力テキストに含まれている必要があります。そうでない場合は機能しません。うまくいかなかったいくつかの方法を試しました。abvと対応するテキストに2つのリストを使用しています。
これがコードです。
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);
}
}
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を置き換えました。
質問のタイトルに基づいてここに来る他の人には、replaceAll
を使用します。
final original = 'Hello World';
final find = 'World';
final replaceWith = 'Home';
final newString = original.replaceAll(find, replaceWith);
// Hello Home