【问题标题】:Multiple StringReplace in CBB 10CBB 10 中的多个 StringReplace
【发布时间】:2015-10-14 20:35:10
【问题描述】:

我有超过 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.

所以,我想知道如何使用更实用和灵活的方法来替换许多字符串。也许通过使用特定功能?

非常感谢。

【问题讨论】:

    标签: string c++builder c++builder-10-seattle


    【解决方案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);
    

    【讨论】:

    • 感谢God!。就像你事先的答案一样,这个答案也很完美。你真是太棒了,真的。非常感谢……非常感谢,雷米!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2017-09-05
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多