拆分字符串并将最后一个元素附加到新字符串上,直到字符串列表为空

本文关键字:字符串 列表 串并 字符 最后一个 元素 拆分 | 更新日期: 2023-09-27 18:15:26

我想分割一个字符串,将其获取到一个列表,然后将所有项附加到一个新的字符串中,而不包含列表的最后一个元素。直到列表为空为止。

那么我们假设我的拆分字符串列表是这样的:

01

0203号

04

那么我希望我的新列表看起来像这样:

01.02.03

01.0201

拆分字符串是没有问题的,并使我的第一个正确的字符串。问题是我如何让循环"重新开始"没有最后一个元素,并继续这样做,直到列表为空。这就是我所取得的成就:

var separator = ".";
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
string newString;
foreach(var item in separatedStringList)
{
  if(separatedStringList.Last != item){
      newString += item;
    }
}

拆分字符串并将最后一个元素附加到新字符串上,直到字符串列表为空

您可以执行以下操作来获取字符串列表。

var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split('.').ToList();
var list =
    Enumerable.Range(1, separatedStringList.Count - 1)
        .Select(i => string.Join(".", separatedStringList.Take(i)))
        .ToList();
foreach(var s in list) Console.WriteLine(s);

这将输出

01

01.02

01.02.03

如果你想让它们以相反的顺序,只需在ToList()之前添加一个Reverse(),或者将传递给Take的参数从i更改为separatedStringList.Count - i

var listOfStrings = "01.02.03.04";
var arr = listOfStrings.Split(new char[] { '.' });        
List<string> results = new List<string>();
for (int i = 1; i < arr.Length; i++)
{
    var str = String.Join(".", arr.Reverse().Skip(i).Reverse());
    results.Add(str);
}
编辑:

for (int i = 1; i < arr.Length; i++)
{
    var str = String.Join(".", arr.Take(arr.Length - i));
    results.Add(str);
}

您可以在这里使用LINQ的Take方法:

for (int i = separatedStringList.Count - 1; i--; i > 0)
{
    newString = String.Join(".", separatedStringList.Take(i).ToArray());
    Console.WriteLine(newString);
}

我不确定你是想要单独的字符串还是一个跨越多行(或者可能是字符串列表?)。我的答案很可能不能解决你的问题,但它可能是一个很好的起点。

看不出有什么问题:

var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new List<string>();
//take "01"
var temp = separatedStringList[0];
//add "01" to list
result.Add(temp);
if(separatedStringList.Count > 1)
{
    //loop through second till last 
    for(int i = 1; i < separatedStringList.Count - 1; i++)
    {
        //make temp "01.02" then "01.02.03"
        temp += "." + separatedStringList[i];
        //add temp to list
        result.Add(temp);
    }
}

相反方向:

var separator = '.';
var listOfStrings = "01.02.03.04";
var separatedStringList = listOfStrings.Split(separator).ToList();
var result = new string[separatedStringList.Count - 1];
var temp = separatedStringList[0];
result[result.Length - 1] = temp;
for (int i = 1; i < separatedStringList.Count - 1; i++)
{
    temp += "." + separatedStringList[i];
    result[result.Length - i - 1] = temp;
}