如果最右侧的值为 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

但是,列表的长度可能不同,这增加了另一个级别的复杂性。

如果最右侧的值为 null,则字符串尾随值的联接列表不需要分隔符

只需从列表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);