2015-10-14 38 views
0

我有超過10個不同的字符串,我想替換。現在,我正在使用以下代碼中所示的手動方法。Multiple StringReplace in CBB 10

StringReplace(StringReplace(StringReplace(StringReplace(
StringReplace(StringReplace(StringReplace(MyEditor->Text, 
"one","ab",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"two","cd",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"three","ef",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"four","gh",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"five","ij",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"six","kl",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase), 
"seven","mn",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase); 

...so on and on. 

所以,我想知道如何用更實用和靈活的方法來替換很多字符串。也許通過使用特定的功能?

非常感謝。

回答

1

該RTL沒有爲此目的的功能。你必須寫自己的,如:

struct StringReplacePattern 
{ 
    String OldPattern; 
    String NewPattern; 
}; 

String __fastcall MultiStringReplace(const String S, const StringReplacePattern *Patterns, int NumPatterns, TReplaceFlags Flags) 
{ 
    String Result = S; 
    for (int i = 0; i < NumPatterns; ++i) 
     Result = StringReplace(Result, Patterns[i].OldPattern, Patterns[i].NewPattern, Flags); 
    return Result; 
} 

然後,你可以這樣調用:

StringReplacePattern patterns[] = { 
    {"one", "ab"}, 
    {"two", "cd"}, 
    {"three", "ef"}, 
    {"four", "gh"}, 
    {"five", "ij"}, 
    {"six", "kl"}, 
    {"seven", "mn"}, 
    // and so on... 
}; 

String S = MultiStringReplace(MyEditor->Text, patterns, ARRAYSIZE(patterns), TReplaceFlags()<< rfReplaceAll << rfIgnoreCase); 
+0

所有的讚美和感謝是的'God'!事先就像你的答案一樣,這個答案也是完美的。確實,你太棒了。非常感謝你......雷米! –