2014-02-24 48 views
1

如何使用Delphi將給定字符串中的特殊字符替換爲空格或僅刪除它?以下在C#中有效,但我不知道如何在Delphi中編寫它。如何使用delphi替換給定字符串中的特殊字符與空格或無空格

public string RemoveSpecialChars(string str) 
{ 
    string[] chars = new string[] { ",", ".", "/", "!", "@", "#", "$", "%", "^", "&", "*", "'", "\"", ";","_","(", ")", ":", "|", "[", "]" }; 

    for (int i = 0; i< chars.Lenght; i++) 
    { 
     if (str.Contains(chars[i])) 
     { 
      str = str.Replace(chars[i],""); 
     } 
    } 
    return str; 
} 

回答

0

試試這個:

FUNCTION RemoveSpecialChars(CONST STR : STRING) : STRING; 
    CONST 
    InvalidChars : SET OF CHAR = [',','.','/','!','@','#','$','%','^','&','*','''','"',';','_','(',')',':','|','[',']']; 

    VAR 
    I : Cardinal; 

    BEGIN 
    Result:=''; 
    FOR I:=1 TO LENGTH(STR) DO 
     IF NOT (STR[I] IN InvalidChars) THEN Result:=Result+STR[I] 
    END; 
+0

我們能不能有任何其他邏輯..除了這個......要更換給出一個字符串 – user3345195

2

實際上存在StrUtils單位StringReplace功能,可以這樣使用:

uses StrUrils; 

... 

var 
    a, b: string; 
begin 
    a := 'Google is awesome! I LOVE GOOGLE.'; 
    b := StringReplace(a, 'Google', 'Microsoft', [rfReplaceAll, rfIgnoreCase]); 
    // b will be 'Microsoft is awesome! I LOVE Microsoft' 
end; 

所以,你可以把代碼寫在幾乎相同就像你在C#中所做的一樣(而不是在這裏可以使用Pos函數)。但我會建議使用HeartWare的方法,因爲它應該更有效率。

7

我會寫的函數是這樣的:當你看到它寫下來

function RemoveSpecialChars(const str: string): string; 
const 
    InvalidChars : set of char = 
    [',','.','/','!','@','#','$','%','^','&','*','''','"',';','_','(',')',':','|','[',']']; 
var 
    i, Count: Integer; 
begin 
    SetLength(Result, Length(str)); 
    Count := 0; 
    for i := 1 to Length(str) do 
    if not (str[i] in InvalidChars) then 
    begin 
     inc(Count); 
     Result[Count] := str[i]; 
    end; 
    SetLength(Result, Count); 
end; 

作用是很明顯的。我更願意嘗試避免執行大量的堆分配,這就是爲什麼代碼預先分配一個緩衝區,然後在循環結束時確定其大小的原因。

+0

這是否意味着我後,我用它來FreeAndNil這個函數的結果特殊字符? –

+1

@lucas不,一點都沒有,這是一個字符串 –

-1
const 
    InvalidChars = 
    [',','.','/','!','@','#','$','%','^','&','*','''','"',';','_','(',')',':','|','[',']']; 

var 
    // i, Count: Integer; 
    str: String; 

begin 
    Writeln('please enter any Text'); 
    Readln(str); 
    Writeln('The given Text is',str); 
    Count := 0; 
    for i := 1 to Length(str) do 
    if (str[i] in InvalidChars) then 
    begin 
     str[i] := ' '; 
     Write(''); 
    end; 
    Writeln(str); 
    Readln; 
end. 
+0

這並不回答被問到的問題 –

+0

@DavidHeffernan,用空格替換問題。 –

+0

@LURD寫入控制檯?內聯主要而不是功能? –