Del*_*ics 10
虽然其他答案都是可行的替代方案,但是您的特定代码不起作用的原因是由于字符代码中的一个简单错误:
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
Run Code Online (Sandbox Code Playgroud)
char代码#34代表双引号 char:"
您需要删除的是单引号 /撇号:'
它的字符代码为#39,因此这个简单的更改应修复原始代码:
MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
Run Code Online (Sandbox Code Playgroud)
避免这种混淆的一种简单方法是使用文字字符,而不是字符代码(它也会使您的代码更容易阅读/理解,因为您不必尝试记住代码所应用的字符串表示 - 当然你可以添加一个注释,但是如果你改变了代码本身的行为,那么那个注释必须保持最新...我个人更喜欢自我记录代码.但我离题了.
由于单引号char用于分隔char文字,因此文字中的嵌入式单引号表示为2个连续的单引号:
MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
Run Code Online (Sandbox Code Playgroud)
(注意: 在Delphi 2010中,我似乎记得字符串现在可以用单引号或双引号字符分隔,虽然我不记得这是否扩展到字符文字(与单字符字符串不同.如果是这样,那么这char literal可以表示为"'",但是你是否发现这个更少或更多的混淆是个人偏好的问题.对于我自己,我认为混合字符串分隔符并不明智.一致性对我的经验准确性有很大的帮助.)
小智 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;
Run Code Online (Sandbox Code Playgroud)
S现在等于'A,B,C,D'.
ReplaceText将调用AnsiReplaceText,后者又调用SysUtils.StringReplace并为您设置替换标志[rfReplaceAll,rfIgnoreCase].