我得到了一个包含整数值和字符串的列表。例如
DetermineDigits = {1,8,16,24}
String = "|Field1, Field2; Field26"
我想得到以下输出:
Dim output as List(Of String) = Feld1
Feld2
Feld3
我试过
For i = 1 To DetermineDigits.Count - 1
Dim NoOfDigits As Integer = DetermineDigits(i) - DetermineDigits(i - 1) - 1
tmpStr = String.Substring(DetermineDigits(i - 1), NoOfDigits)
list.add(tmpStr)
Next
这是有效的,但我宁愿使用Linq。有什么想法吗?
您可以使用Enumerable.Range()
和Select()
来迭代DetermineDigits
索引:
Dim DetermineDigits = {1, 8, 16}
Dim Str = "|Field1, Field2; Field26"
Dim pos = DetermineDigits.Concat(New Integer() {Str.Length}).ToArray()
Dim output = Enumerable.Range(1, pos.Count() - 1) _
.Select(Function(i) Str.Substring(pos(i - 1), pos(i) - pos(i - 1)))
请注意pos
数组,它是添加了最后一个子字符串结束位置的DetermineDigits
。如果没有添加,则相当于丢失了最后一个子字符串。
或者,您可以考虑使用Zip()
来获得每个子字符串的{StartPos,EndPos}索引列表。
话虽如此,我建议考虑使用regex来提取子字符串。使用简单的w+
可以很容易地获取示例中的代码,因此您最终会得到非常紧凑的代码:
Dim Str = "|Field1, Field2; Field26"
Dim output = Regex.Matches(Str, "w+").Cast(Of Match)().Select(Function(m) m.Value).ToList()
注意:别忘了添加Imports System.Text.RegularExpressions
。
如果您的子字符串模式更复杂,我们可以进一步详细说明正则表达式。