检查MyString [1]是否是字母字符?

时间:2011-03-02 18:32:41

标签: string delphi char character

我有一个字符串,我们称之为MyStr。我试图摆脱字符串中的每个非字母字符。就像在IM中像MSN和Skype一样,人们将他们的显示名称设置为 [ - Bobby - ] 。我想删除该字符串中不是字母字符的所有内容,所以我留下的就是“名称”。

我怎么能在Delphi中做到这一点?我正在考虑创建一个TStringlist并将每个有效字符存储在那里,然后使用IndexOf来检查char是否有效,但我希望有一种更简单的方法。

4 个答案:

答案 0 :(得分:15)

最简单的方法是

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;

答案 1 :(得分:5)

尝试使用此代码检查char是否是按字母顺序排列的字符。

  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 :(得分:2)

我有一整套优化的字符串例程来完成这些工作,可以使用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;

您可以下载here

答案 3 :(得分:0)

完美解决方案:

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

适用于Delphi XE

http://regexpstudio.com