替换字符串中某个字符的每隔一个字符

本文关键字:字符 一个 字符串 替换 | 更新日期: 2023-09-27 18:20:02

为了找到解决方案,我搜索了很多,但一无所获。然而,我确实怀疑这是因为我不知道该搜索什么。

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

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

然后希望用空格(")替换每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();
}

如果这些是坐标对,您可以将它们解析为对,而不是单独的数字:

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结合使用来重建初始字符串。

这里有一个方法。我不认为其他解决方案删除了最后一个逗号或空格。我还包括一个测试。

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

另一种方法:

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

"加入";字符串与";inputString";

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

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