2014-02-24 54 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写入控制台?内联主要而不是功能? –