代码之家  ›  专栏  ›  技术社区  ›  Pieter van Wyk

从字符串中删除引号

  •  8
  • Pieter van Wyk  · 技术社区  · 16 年前

    我需要删除'A','B','C','D'中的所有引号,给出A,B,C,D的结果。我试过了

    MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);

    但到目前为止运气不好。

    谢谢,彼得

    4 回复  |  直到 16 年前
        1
  •  10
  •   Deltics    16 年前

    尽管其他答案都是可行的选择,但您的特定代码不起作用的原因是字符代码中的一个简单错误:

    MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
    

    字符代码#34表示 双引号 字符:“

    您需要删除的是 单引号 /撇号:'

    这有字符代码#39,因此这个简单的更改应该可以修复您的原始代码:

    MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
    

    避免这种混淆的一个简单方法是使用文字字符,而不是字符代码(这也将使您的代码更容易阅读/理解,因为您不必试图记住代码应该表示什么字符-当然,您可以添加注释,但是如果你改变了代码本身的行为,那么评论必须保持最新。。。我个人尽可能喜欢自文档化代码。但我离题了)。

    MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
    

    ( 注: 在Delphi 2010中,我似乎记得字符串现在可以用单引号或双引号字符分隔,尽管我不记得这是否扩展到字符文本(与单字符字符串不同)。如果是这样的话,那么这个char文本可以改为表示为“'”,尽管您是否觉得这比较容易混淆是个人偏好的问题。对于我自己,我认为混合字符串分隔符是不明智的。在我的经验中,一致性对准确性有很大帮助。 )

        2
  •  14
  •   skamradt    16 年前

    你可以用 MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);

        3
  •  7
  •   Warren Markon    16 年前

    您可以使用StrUtils.ReplaceText。

    实施

    {$R*.dfm}

    procedure TGeneric.Button1Click(Sender: TObject);
    Var
      S: String;
    begin
      S := '''A'',''B'',''C'',''D''';
      S := ReplaceText(S, '''', '');
      ShowMessage(S);
    end;
    

    现在S等于‘A,B,C,D’。

    ReplaceText将调用AnsiReplaceText,AnsiReplaceText将使用为您设置的替换标志[rfReplaceAll,rfIgnoreCase]调用SysUtils.StringReplace。

        4
  •  3
  •   ulrichb    16 年前
    procedure TFormMain.Button1Click(Sender: TObject);
    var
      s: String;
    begin
      s := '''A'',''B'',''C'',''D''';
      s := StringReplace(s, '''', '', [rfReplaceAll]);
      /// now s contains 'A,B,C,D'
    end;
    
        5
  •  0
  •   Jon Lennart Aasenden    5 年前

    这是一个相当简单的函数。要去除所有引号(字符串中存在多个引号),请使用StringReplace,如上所示。 如果只想取消对字符串的引用,可以执行以下操作:

    function UnQuote(Text: string): string; inline;
    begin
      if ( Text.StartsWith('"') or Text.StartsWith('''') ) then
      begin
        if ( Text.EndsWith('"') or Text.EndsWith('''') ) then
          exit( copy(Text, 2, Text.Length-2) );
      end;
      result := Text;
    end;
    

    这个简单的例程理所当然地认为,在返回内容之前,两个引号都在那里。您可以通过pos()搜索最后一个引号来优化它,但我将留给您。