Проверьте, является ли MyString [1] алфавитным символом? - PullRequest
7 голосов
/ 02 марта 2011

У меня есть строка, давайте назовем ее MyStr.Я пытаюсь избавиться от каждого не алфавитного символа в строке.Например, в IM, таких как MSN и Skype, люди отображают свои отображаемые имена как [- Бобби -] .Я хотел бы удалить из этой строки все, что не является алфавитным символом, поэтому все, что у меня осталось, это «имя».

Как я могу это сделать в Delphi?Я думал о создании TStringlist и сохранении там каждого действительного символа, а затем с помощью IndexOf проверял, действителен ли символ, но я надеялся на более легкий путь.

Ответы [ 4 ]

15 голосов
/ 02 марта 2011

Самый простой подход -

function GetAlphaSubstr(const Str: string): string;
const
  ALPHA_CHARS = ['a'..'z', 'A'..'Z'];
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Str[i] in ALPHA_CHARS then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;

, но это будет рассматривать только английские буквы как "алфавитные символы".Он даже не будет рассматривать чрезвычайно важные шведские буквы Å, Ä и Ö как «алфавитные символы»!

Чуть более изощренно

function GetAlphaSubstr2(const Str: string): string;
var
  ActualLength: integer;
  i: Integer;
begin
  SetLength(result, length(Str));
  ActualLength := 0;
  for i := 1 to length(Str) do
    if Character.IsLetter(Str[i]) then
    begin
      inc(ActualLength);
      result[ActualLength] := Str[i];
    end;
  SetLength(Result, ActualLength);
end;
5 голосов
/ 02 марта 2011

попробуйте этот код, чтобы проверить, является ли символ алфавитным символом.

  MyStr:='[-Bobby-]';
  //is an alphabetical character ?
  if MyStr[1] in ['a'..'z','A'..'Z'] then

чтобы удалить из строки все не алфавитные символы (английские символы), вы можете использовать что-то вроде этого.

NewStr:='';
for i := 1 to Length(MyStr) do
 if MyStr[i] in ['a'..'z','A'..'Z'] then
   NewStr:=NewStr+MyStr[i];

теперь переменная NewStr содержит только буквы алфавита.

в более новых версиях delphi вы можете использовать функцию Character.IsLetter.

2 голосов
/ 03 марта 2011

У меня есть целый набор оптимизированных строковых подпрограмм для этой работы, которые работают как с Unicode, так и не-Unicode Delphi.Два наиболее важных из них:

function CsiRemoveArgs(const pInStr: string; const pArgs: string;
                       pRestrictToArgs: Boolean = False): string;
function CsiRemoveArgs(const pInStr: string; pArgs: TSysCharSet;
                       pRestrictToArgs: Boolean = False): string;

Вы можете скачать их здесь .

0 голосов
/ 03 марта 2011

Идеальное решение:

Result := TRegEx.Replace('Input12231213','[^a-zA-Z]+','');  // Result = 'Input'

Работает в Delphi XE

http://regexpstudio.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...