如何从字符串中删除“[] \

时间:2013-09-25 08:53:06

标签: c# asp.net asp.net-mvc string

我有一个字符串

"[\"1,1\",\"2,2\"]"

我希望将此字符串转换为此

1,1,2,2

我正在使用替换功能

obj.str.Replace("[","").Replace("]","").Replace("\\","");

但它没有返回预期的结果。 请帮忙。

5 个答案:

答案 0 :(得分:5)

您尚未删除双引号。使用以下内容:

obj.str = obj.str.Replace("[","").Replace("]","").Replace("\\","").Replace("\"", "");

答案 1 :(得分:2)

如果字符串或排除字符列表很长,这是一种优化方法:

public static class StringExtensions
{
    public static String RemoveAll(this string input, params Char[] charactersToRemove)
    {
        if(string.IsNullOrEmpty(input) || (charactersToRemove==null || charactersToRemove.Length==0))
            return input;

        var exclude = new HashSet<Char>(charactersToRemove); // removes duplicates and has constant lookup time
        var sb = new StringBuilder(input.Length);
        foreach (Char c in input)
        {
            if (!exclude.Contains(c))
                sb.Append(c);
        }
        return sb.ToString();
    }
}

以这种方式使用它:

str = str.RemoveAll('"', '[', ']', '\\'); 
// or use a string as "remove-array":
string removeChars = "\"{[]\\";
str = str.RemoveAll(removeChars.ToCharArray());

答案 2 :(得分:1)

您应该执行以下操作:

obj.str = obj.str.Replace("[","").Replace("]","").Replace("\"","");

string.Replace方法不会替换字符串内容。这意味着,如果你有 string test =“12345”并执行

test.Replace("2", "1");

测试字符串仍为"12345"。替换不会更改字符串本身,但会创建包含已替换内容的新字符串。因此,您需要将此新字符串分配给新的或相同的变量

changedTest = test.Replace("2", "1");

现在,changedTest将包含"11345"

关于代码的另一个注意事项是,字符串中实际上没有\字符。它仅显示为转义引用字符。如果您想了解更多相关信息,请read MSDN article on string literals.

答案 3 :(得分:1)

怎么样

var exclusions = new HashSet<char>(new[] { '"', '[', ']', '\\' });
return new string(obj.str.Where(c => !exclusions.Contains(c)).ToArray());

一次性完成所有操作。

Tim Schmelter写道,如果你想经常这样做,特别是对于长字符串的大型排除集,你可以像这样做一个扩展。

public static string Strip(
        this string  source,
        params char[] exclusions)
{
    if (!exclusions.Any())
    {
        return source;
    }

    var mask = new HashSet<char>(exclusions);
    var result = new StringBuilder(source.Length);
    foreach (var c in source.Where(c => !mask.Contains(c)))
    {
        result.Append(c);
    }

    return result.ToString();
}

所以你可以做到,

var result = "[\"1,1\",\"2,2\"]".Strip('"', '[', ']', '\\');

答案 4 :(得分:0)

仅使用此正则表达式[0-9]+捕获数字,然后连接匹配项:

var input = "[\"1,1\",\"2,2\"]";
var regex = new Regex("[0-9]+");
var matches = regex.Matches(input).Cast<Match>().Select(m => m.Value);
var result = string.Join(",", matches);