从字符串中删除引号

时间:2010-02-10 17:08:50

标签: delphi string quotes

如何使用Delphi从字符串中删除引号?

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

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

但到目前为止没有运气。

谢谢,彼得

5 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:10)

虽然其他答案都是可行的替代方案,但是您的特定代码无效的原因是由于字符代码中的一个简单错误:

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

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

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

这个字符代码为#39,因此这个简单的更改应修复原始代码:

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

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

由于单引号char用于分隔char文字,因此文字中的嵌入式单引号表示为2个连续的单引号:

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

注意: 在Delphi 2010中,我似乎记得字符串现在可以用单引号或双引号字符分隔,但我不记得这是否延伸到char文字(与单个字符串不同。如果是这样,那么这个字面文字可以表示为“'”,不管你是否发现这个更少或更多的混淆是个人偏好的问题。对于我自己,我认为混合不太合理字符串分隔符。一致性对我的体验准确性有很大的帮助。

答案 2 :(得分:7)

您可以使用StrUtils.ReplaceText。

实施

使用StrUtils;

{$ 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,后者又调用SysUtils.StringReplace并为您设置替换标志[rfReplaceAll,rfIgnoreCase]。

答案 3 :(得分:3)

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;

答案 4 :(得分:0)

这是一个相当简单的函数编写。要去除所有引号(字符串中存在多个引号),请使用 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() 搜索来使其更智能,但我将把它留给您。