如何使用Delphi从字符串中删除引号?
实施例。我需要删除“A”,“B”,“C”,“D”中的所有引号,给出A,B,C,D的结果。我试过了
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
但到目前为止没有运气。
谢谢,彼得
答案 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() 搜索来使其更智能,但我将把它留给您。