替换字符串中某个字符的所有其他字符

时间:2013-06-26 13:22:30

标签: c# arrays string

我经常搜索以找到解决方案,但找不到任何东西。但我怀疑这是因为我不知道该搜索什么。

首先,我有一个转换为数组的字符串。字符串的格式如下:

"99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5"

我使用以下代码创建数组:

    public static Array StringToArray(string String)
    {
        var list = new List<string>();
        string[] Coords = String.Split(' ', ',');
        foreach (string Coord in Coords)
        {
            list.Add(Coord);
        }
        var array = list.ToArray();
        return array;
    }

现在我的问题是;我试图找到一种方法将其转换回字符串,具有相同的格式。所以,我可以简单地使用:

创建一个字符串
    public static String ArrayToString(Array array)
    {
        string String = string.Join(",", array);
        return String;
    }

然后希望用空格(“”)替换每个第二个“,”。这可能吗?或者你还有其他方式吗?

提前谢谢!我希望我的问题有道理。

5 个答案:

答案 0 :(得分:2)

没有内置的方法来做你需要的事情。然而,实现你需要的东西是非常微不足道的。

public static string[] StringToArray(string str)
{
    return str.Replace(" ", ",").Split(',');
}

public static string ArrayToString(string[] array)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i <= array.Length-1; i++)
    {
        sb.AppendFormat(i % 2 != 0 ? "{0} " : "{0},", array[i]);
    }
    return sb.ToString();
}

答案 1 :(得分:2)

如果这些是坐标对,你可以先从对中解析它们,而不是像单独的数字一样:

public static IEnumerable<string[]> ParseCoordinates(string input)
{
    return input.Split(' ').Select(vector => vector.Split(','));
}

重建原始字符串比较容易:

public static string PrintCoordinates(IEnumerable<string[]> coords)
{
    return String.Join(" ", coords.Select(vector => String.Join(",", vector)));
}

但如果您绝对需要将数据放在像数组这样的平面结构中,那么可以将其转换为更结构化的格式:

public static IEnumerable<string[]> Pairwise(string[] coords)
{
    coords.Zip(coords.Skip(1), (coord1, coord2) => new[] { coord1, coord2 });
}

然后,您可以将此方法与PrintCoordinates结合使用来重建初始字符串。

答案 2 :(得分:1)

这是一条路线。我不认为其他解决方案正在删除最后一个逗号或空格。我还包括一个测试。

public static String ArrayToString(Array array)
{
    var useComma = true;
    var stringBuilder = new StringBuilder();

    foreach (var value in array)
    {
        if (useComma)
        {
            stringBuilder.AppendFormat("{0}{1}", value, ",");
        }
        else
        {
            stringBuilder.AppendFormat("{0}{1}", value, " ");
        }

        useComma = !useComma;
    }

    // Remove last space or comma
    stringBuilder.Length = stringBuilder.Length - 1;

    return stringBuilder.ToString();
}

[TestMethod]
public void ArrayToStringTest()
{
    var expectedStringValue =
        "99.28099822998047,68.375 118.30699729919434,57.625 126.49999713897705,37.875 113.94499683380127,11.048999786376953 96.00499725341797,8.5";
    var array = new[]
        {
            "99.28099822998047",
            "68.375",
            "118.30699729919434",
            "57.625",
            "126.49999713897705",
            "37.875",
            "113.94499683380127",
            "11.048999786376953",
            "96.00499725341797",
            "8.5",
        };

    var actualStringValue = ArrayToString(array);

    Assert.AreEqual(expectedStringValue, actualStringValue);
}

答案 3 :(得分:0)

另一种方法:

string inputString = "1.11,11.3 2.22,12.4 2.55,12.8";
List<string[]> splitted = inputString.Split(' ').Select(a => a.Split(',')).ToList();
string joined = string.Join(" ", splitted.Select(a => string.Join(",",a)).ToArray());

“splitted”列表将如下所示:

  

1.11 11.3

     

2.22 12.4

     

2.55 12.8

“加入”字符串与“inputString”

相同

答案 4 :(得分:0)

这是解决此问题的另一种方法。

    public static string ArrayToString(string[] array)
    {
        Debug.Assert(array.Length % 2 == 0, "Array is not dividable by two.");

        // Group all coordinates as pairs of two.
        int index = 0;
        var coordinates = from item in array
                          group item by index++ / 2
                              into pair
                              select pair;

        // Format each coordinate pair with a comma.
        var formattedCoordinates = coordinates.Select(i => string.Join(",", i));

        // Now concatinate all the pairs with a space.
        return string.Join(" ", formattedCoordinates);
    }

一个简单的演示:

    public static void A_Simple_Test()
    {
        string expected = "1,2 3,4";
        string[] array = new string[] { "1", "2", "3", "4" };
        Debug.Assert(expected == ArrayToString(array));
    }