我有一個字符串,可以叫它MyStr
。我試圖擺脫字符串中的每個非字母字符。就像在MSN和Skype這樣的即時通訊中,人們把他們的顯示名稱設置爲[-Bobby-]。我想刪除該字符串中不是字母字符的所有內容,所以我留下的是「名稱」。檢查MyString [1]是否是字母字符?
如何在Delphi中做到這一點?我正在考慮創建一個TStringlist
並將每個有效字符存儲在那裏,然後使用IndexOf
來檢查字符是否有效,但我希望有一個更簡單的方法。
我有一個字符串,可以叫它MyStr
。我試圖擺脫字符串中的每個非字母字符。就像在MSN和Skype這樣的即時通訊中,人們把他們的顯示名稱設置爲[-Bobby-]。我想刪除該字符串中不是字母字符的所有內容,所以我留下的是「名稱」。檢查MyString [1]是否是字母字符?
如何在Delphi中做到這一點?我正在考慮創建一個TStringlist
並將每個有效字符存儲在那裏,然後使用IndexOf
來檢查字符是否有效,但我希望有一個更簡單的方法。
最簡單的方法是
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;
@Andreas - +1!是否有可能包括Ø和Ø?謝謝! – Jeff 2011-03-02 18:51:41
在第一種方法中,您可以將它們添加到集合中(''Æ','Ø','Å','Ä','Ö','å','ä','ö'')。後一種方法,使用'IsLetter',將自動包含來自所有語言的所有字母。 – 2011-03-02 18:53:31
@Jeff GetAlphaSubstr2就是這麼做的 – 2011-03-02 18:54:19
嘗試此代碼來檢查一個字符是否是字母字符。
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
函數。
我有一個整體的優化串程序套件做這個東西,它與Unicode和非Unicode德爾福工作。兩個最相關的是:
function CsiRemoveArgs(const pInStr: string; const pArgs: string;
pRestrictToArgs: Boolean = False): string;
function CsiRemoveArgs(const pInStr: string; pArgs: TSysCharSet;
pRestrictToArgs: Boolean = False): string;
你可以下載它們here。
對於允許覆蓋其餘部分A..Z範圍之外的字母字符。 – 2011-03-02 21:40:59
完美的解決方案:
Result := TRegEx.Replace('Input12231213','[^a-zA-Z]+',''); // Result = 'Input'
作品在Delphi XE
即使在美國,人們也應該比這更少幼稚。 – 2014-11-25 15:33:27
'TStringList'聽起來很** **低效... – 2011-03-02 18:39:31
@Jeff - 你只是需要處理安思字符串(英文字符)還是Unicode字符? – 2011-03-02 18:43:36
@Ken - 我也需要像「æøå」這樣的字符。 – Jeff 2011-03-02 18:46:01