我经常搜索以找到解决方案,但找不到任何东西。但我怀疑这是因为我不知道该搜索什么。
首先,我有一个转换为数组的字符串。字符串的格式如下:
"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;
}
然后希望用空格(“”)替换每个第二个“,”。这可能吗?或者你还有其他方式吗?
提前谢谢!我希望我的问题有道理。
答案 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));
}