我有一个独特的情况,我需要创建在零位置为空的字符串数组,然后为剩余位置创建一个拆分字符串。例如,我想输入以下字符串:
"this/\is/\a/\test/\string"
输出以下结果
array[0] = null;
array[1] = "this";
array[2] = "is";
array[3] = "a";
array[4] = "test";
array[5] = "string";
我知道我可以通过多行代码以笨重的方式完成此任务,但我正在寻找一种优雅的方法将字符串拆分到特定的数组位置,或者只是在它之前插入null。位置0的空字符串也可以接受但不理想。有没有一个很好的方法来实现这一目标?数组位置的数量会有所不同,因为输入字符串将包含不同数量的参数。
答案 0 :(得分:9)
将分隔符添加到字符串中,然后在拆分后将第一个元素设置为null:
string data = @"this/\is/\a/\test/\string";
string[] result = (@"/\" + data).Split(new[] {@"/\"}, StringSplitOptions.None);
result[0] = null;
答案 1 :(得分:2)
我想你可以预先添加一个" / \"到你要分裂的字符串...
(这会给你一个空字符串而不是null,你说这是好的但不理想。如果你想让第一个条目为null,你可以在事后做到。)
答案 2 :(得分:1)
如果你需要多次这样做,并且希望代码看起来干净 - 或者你想要一个可变数量的前置空值,你总是可以编写自己的扩展方法:
public static class Extensions
{
public static string[] Split(this string input, string delimiter, int prependNullCount)
{
var defaultSplit = input.Split(new string[] { delimiter }, StringSplitOptions.None);
string[] result = new string[defaultSplit.Length + prependNullCount];
defaultSplit.CopyTo(result, prependNullCount);
return result;
}
}
然后你将使用方法:
string input = @"this/\is/\a/\test/\string";
string[] result = input.Split(@"/\", 1);
答案 3 :(得分:0)
你可以在第一个索引处添加/ \并按" / \分割 简单的代码:
string input = @"this/\is/\a/\test/\string";
string[] result = (@"/\" + input ).Split(new[] {@"/\"}, StringSplitOptions.None);