拆分字符串并将最后一个元素附加到新字符串上,直到字符串列表为空
本文关键字:字符串 列表 串并 字符 最后一个 元素 拆分 | 更新日期: 2023-09-27 18:15:26
我想分割一个字符串,将其获取到一个列表,然后将所有项附加到一个新的字符串中,而不包含列表的最后一个元素。直到列表为空为止。
那么我们假设我的拆分字符串列表是这样的:
010203号
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.0201.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;
}