【问题标题】:Delphi: Any StringReplaceW or WideStringReplace functions out there?Delphi:有任何 StringReplaceW 或 WideStringReplace 函数吗?
【发布时间】:2011-02-04 14:03:42
【问题描述】:

是否有任何宽字符串操作实现?

function WideUpperCase(const S: WideString): WideString;

function WidePos(Substr: WideString; S: WideString): Integer;

function StringReplaceW(const S, OldPattern, NewPattern: WideString; 
      Flags: TReplaceFlags): WideString;

etc

【问题讨论】:

  • 您可能需要考虑升级到支持原生 Unicode 的 Delphi 2009。
  • 如果我身边有几千美元就好了。

标签: delphi unicode string delphi-5


【解决方案1】:

JEDI project 包括 JclUnicode.pas,它有 WideUpperCase 和 WidePos,但没有 StringReplace。 SysUtils.pas StringReplace 代码不是很复杂,因此您可以轻松地复制它并用 WideString 替换字符串,用 WidePos 替换 AnsiPos,用 WideUpperCase 替换 AnsiUpperCase 并获得一些功能,如果慢的话。

【讨论】:

    【解决方案2】:

    我一般导入“Microsoft VBScript Regular Expression 5.5”类型库,使用IRegExp对象。

    OP 编辑​​

    我喜欢这个答案,我继续使用 RegEx 编写了一个 StringReplaceW 函数:

    function StringReplaceW(const S, OldPattern, NewPattern: WideString; Flags: TReplaceFlags): WideString;
    var
        objRegExp: OleVariant;
        Pattern: WideString;
        i: Integer;
    begin
        {
            Convert the OldPattern string into a series of unicode points to match
            \uxxxx\uxxxx\uxxxx
    
                \uxxxx  Matches the ASCII character expressed by the UNICODE xxxx.
                            "\u00A3" matches "£".
        }
        Pattern := '';
        for i := 1 to Length(OldPattern) do
            Pattern := Pattern+'\u'+IntToHex(Ord(OldPattern[i]), 4);
    
        objRegExp := CreateOleObject('VBScript.RegExp');
        try
            objRegExp.Pattern := Pattern;
            objRegExp.IgnoreCase := (rfIgnoreCase in Flags);
            objRegExp.Global := (rfReplaceAll in Flags);
    
            Result := objRegExp.Replace(S, NewPattern);
        finally
            objRegExp := Null;
        end;
    end;
    

    【讨论】:

      【解决方案3】:

      TntControls 有一组 Wide-version 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-08
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        • 2011-02-21
        • 1970-01-01
        相关资源
        最近更新 更多