[英]Strip quotes from a string
如何使用 Delphi 从字符串中删除引号?
前任。 我需要从“A”、“B”、“C”、“D”中删除所有引号,得到 A、B、C、D 的结果。 我试过了
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
但到目前为止还没有运气。
谢谢,彼得
您可以使用MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);
尽管其他答案都是可行的替代方案,但您的特定代码不起作用的原因是字符代码中的一个简单错误:
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
字符代码#34 表示双引号字符:"
您需要删除的是单引号/撇号:'
它的字符代码为 #39,因此这个简单的更改应该可以修复您的原始代码:
MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
避免这种混淆的一个简单方法是使用文字字符,而不是字符代码(这也将使您的代码以后更容易阅读/理解,因为您不必尝试记住代码应该是什么字符来表示 - 当然,您可以添加评论,但是如果您更改代码本身的行为,那么该评论必须保持最新......我个人更喜欢尽可能自我记录代码。但我离题了)。
由于单引号字符用于分隔字符文字,文字中嵌入的单引号表示为 2 个连续的单引号:
MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
(注意:在 Delphi 2010 中,我似乎记得字符串现在可以用单引号或双引号字符分隔,尽管我不记得这是否扩展到字符文字(与单字符串不同。如果是这样,那么这个char 文字可以表示为“'”,尽管您是否觉得这或多或少令人困惑是个人喜好的问题。就我个人而言,我认为混合字符串分隔符不太明智。在我的经验中,一致性对准确性有很大帮助. )
您可以使用 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]。
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;
这是一个相当简单的函数编写。 要去除所有引号(字符串中存在多个引号),请使用 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() 搜索来使其更智能,但我将把它留给您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.