[英]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.