如果最右侧的值为 null,则字符串尾随值的联接列表不需要分隔符
本文关键字:分隔符 列表 字符串 不需要 如果 null | 更新日期: 2023-09-27 17:56:01
我想要实现什么,但无法理解的是,如果我有一个字符串列表,比如:
{"test","","data","","123","44"}
这应该由一个字符连接:
test::data::123:44
但是如果最后的列表为空,请不要分隔它
{"test","","data","","",""}
应该是:
test::data
{"test","","","","",""}
应该是:
test
{"test","","","","","44"}
应该是:
test::::44
但是,列表的长度可能不同,这增加了另一个级别的复杂性。
只需从列表Count
中排除尾随的空元素,然后使用 Take
Join
剩余的元素:
List<string> input = ...;
int count = input.Count;
while (count > 0 && string.IsNullOrEmpty(input[count - 1]))
count--;
var output = string.Join(":", input.Take(count));
使用List<T>
特定的FindLastIndex
方法,可以简化为以下"一行":
var output = string.Join(":",
input.Take(input.FindLastIndex(s => !string.IsNullOrEmpty(s)) + 1));
首先,使用您的数组:
test = test.Where(x => !string.IsNullOrEmpty(x)).ToArray();
其中"测试"是你的数组。
然后:
string.Join("::", test);
编辑:
如果通过拆分另一个字符串来获取字符串数组,请考虑以下事项:
string[] strs = myString.split(someDelimeter, StringSplitOptions.RemoveEmptyEntries);
首先确定您想要的最后一个元素,然后像往常一样对列表进行切片并连接:
var lastElementIndex = strings.Select((s, index) => string.IsNullOrEmpty(s) ? -1 : index).Max();
var prefix = strings.Take(lastElementIndex + 1);
var result = string.Join(":", prefix);
var obj = {"test","","data","","123","44"};
var count = obj.Count;
for (var i = count - 1; i > -1; i--)
{
if (obj[i]==String.Empty) {
obj.RemoveAt(i);
}
else break;
}
var arr = obj.Split(new char[] { ','}, StringSplitOptions.RemoveEmptyEntries);
var output = arr.Join(":", arr);