c#查找索引并删除符号中的字符

时间:2012-03-11 21:56:55

标签: c#

有一个字符串,其中包含一些@字符,我想在我的字符串中找到“@”并将其删除,但它也会找到并删除这些字符:“@”

int atsignPlace = str.IndexOf(" @ ");
while (atsignPlace >= 0)
{
    str = str.Remove(atsignPlace,3);
    atsignPlace = str.IndexOf(" @ ");
}

我尝试了这段代码,但它没有删除任何东西,所以它总是先找到'@',这使它成为一个无限循环。

int atsignPlace = str.IndexOf(" @");
while (atsignPlace >= 0)
{
    if( atsignPlace+1 < str.Length && str[atsignPlace+1] == ' ' )
        str = str.Remove(atsignPlace,3);
    atsignPlace = str.IndexOf(" @ ");
 }

替换方法也不正常。

str = str.Replace(" @ ", String.Empty);

可能是'@'字符存在问题。

输入字符串是一个sql查询,我试图从中删除一些参数。

[我使用try-catch进行例外]

4 个答案:

答案 0 :(得分:2)

您的代码运行正常。简短但完整的演示程序:

using System;

class Test
{
    static void Main() 
    {
        string before = "xyz @ abc@123";
        string after = CustomRemove(before);
        Console.WriteLine(after); // Prints xyzabc@123
    }

    static string CustomRemove(string text)
    {
        int atSignIndex = text.IndexOf(" @ ");
        while (atSignIndex >= 0)
        {
            text = text.Remove(atSignIndex, 3);
            atSignIndex = text.IndexOf(" @ ");
        }
        return text;
    }
}

编辑:当然,Replace也可以正常工作:

using System;

class Test
{
    static void Main() 
    {
        string before = "xyz @ abc@123";
        string after = before.Replace(" @ ", "");
        Console.WriteLine(after); // Prints xyzabc@123
    }
}

如果您仍然看到 的问题,那么问题在于您使用此代码的方式,而不是代码本身。

一个猜测:你可能在“@”中有非打印字符,这会阻止它们被删除。但你还没有真正给我们足够的信息说。一个简短但完整的程序演示它不起作用会有所帮助......

答案 1 :(得分:1)

保持简单:

string result = input.Replace(" @ ", String.Empty);

MSDN:String.Replace Method (String, String)

答案 2 :(得分:0)

我会使用正则表达式来确保您获得任意数量的空格:

Regex.Replace(input, @"\s+@\s+", m => string.Empty);

答案 3 :(得分:0)

string LclString = "@12 @ 123@123 @ @";
LclString = LclString.Replace(" @ ", "  ");

收益率: @ 12 123 @ 123 @