如何使用Delphi从字符串中删除引号?
例如,我需要从'A','B','C','D'中删除所有引号,得到A,B,C,D的结果。 我已经尝试过
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
但目前还没有成功。
谢谢,Pieter
您可以使用 MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
字符代码#34表示双引号字符: "
您需要删除的是单引号 /撇号: '
这个字符代码为#39,所以这个简单的更改应该可以修复您原来的代码:
MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
避免这种混淆的简单方法是使用字面字符而不是字符编码(这也会让您的代码更容易阅读/理解,因为您不必试图记住代码应该表示什么字符 - 当然,您可以添加注释,但如果更改代码本身的行为,则必须保持该注释最新... 我个人尽可能喜欢自文档化的代码。但我离题了)。
由于单引号字符用于定界字符字面量,因此字面量中嵌入的单引号表示为2个连续的单引号:
MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
(注意: 在Delphi 2010中,似乎字符串现在可以用单引号或双引号括起来,虽然我不确定这是否扩展到字符字面值(区别于单个字符的字符串)。如果是这样,那么这个字符字面值可以用单引号“'”表示,但你是否认为这更加混乱还是更容易理解,这取决于个人偏好。就我个人而言,混合使用字符串分隔符不太明智。根据我的经验,一致性对精确性有很大的帮助。)
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,而后者会为你设置替换标志[rfReplaceAll, rfIgnoreCase]并调用SysUtils.StringReplace函数。
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;
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;