簡體   English   中英

從字符串中去除引號

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM