0

我进行了很多搜索以找到解决此问题的方法,但找不到任何东西。但是,我确实怀疑这是因为我不知道要搜索什么。

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

"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;
    }

然后希望用空格(“”)替换每个第二个“,”。这可能吗?还是有其他方法可以做到这一点?

先感谢您!我希望我的问题是有道理的。

4

5 回答 5

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();
}
于 2013-06-26T13:36:35.530 回答
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来重建您的初始字符串。

于 2013-06-26T13:43:34.463 回答
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);
}
于 2013-06-26T13:48:00.947 回答
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());

“拆分”列表将如下所示:

1.11 11.3

2.22 12.4

2.55 12.8

“joined”字符串与“inputString”相同

于 2013-06-26T13:49:00.803 回答
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));
    }
于 2013-06-26T14:18:48.600 回答