Полосковые кавычки из строки
Как удалить кавычки из строки с помощью Delphi?
Ex. Мне нужно удалить все кавычки из "A", "B", "C", "D", давая результат A,B,C, D. Я пробовал
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
но пока не повезло.
Спасибо, Питер
4 ответов
хотя все остальные ответы являются жизнеспособными альтернативами, причина, по которой ваш конкретный код не работает, связана с простой ошибкой в символьном коде:
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
код символа #34 представляет двойной кавычки char:"
что нужно удалить одиночная кавычка/apostrophes:'
Это код символа #39, так это простое изменение должно исправить ваш исходный код:
MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
простой способ избегайте такого рода путаницы, чтобы использовать буквальный символ, а не код char (это также сделает ваш код легче читать/понимать позже, так как вам не придется пытаться вспомнить, какой символ должен представлять код - вы можете добавить комментарий, конечно, но тогда этот комментарий должен быть обновлен, если вы измените поведение самого кода... Я лично предпочитаю документировать код самостоятельно, насколько это возможно. Но я отвлекся).
Так как одинарная кавычка char используется для разделите литерал char, встроенная одинарная кавычка в литерале представлена в виде 2 последовательных одинарных кавычек:
MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
(Примечание: в Delphi 2010 я, кажется, помню, что строки теперь могут быть разделены либо одиночными, либо двойными символами кавычек, хотя я не помню, распространяется ли это на литералы символов (в отличие от одиночных символьных строк. Если это так, то этот буквальный символ может быть выражен как"'", хотя находите ли вы это меньше или более запутанным является вопрос личных предпочтений. Для себя я считаю менее разумным смешивать строковые разделители. Последовательность-это большое подспорье для точности в моем опыте.)
вы можете использовать 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;