Linq子串由索引

时间:2016-08-03 06:52:42

标签: vb.net linq substring

我有一个包含Integer值和String的List。例如

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。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用<div class="form-group"> <label for="email" class="col-sm-3 control-label">Logo</label> <div class="col-sm-7"> <input type="file" name="logo" id="logo" placeholder="Logo" autofocus="" required="" class="form-control"> </div> </div> <div class="form-group"> <label for="address" class="col-sm-3 control-label">Address</label> <div class="col-sm-7"> <textarea name="address" id="address" placeholder="Address" required="" class="form-control"></textarea> </div> </div>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获取每个子字符串的{StartPos,EndPos}索引列表。

话虽如此,我建议考虑使用正则表达式来提取子字符串。您的示例中的内容可以通过简单的Zip()轻松获取,因此您最终会获得非常紧凑的代码:

\w+

注意:不要忘记添加Dim Str = "|Field1, Field2; Field26" Dim output = Regex.Matches(Str, "\w+").Cast(Of Match)().Select(Function(m) m.Value).ToList()

如果您的子字符串模式更复杂,我们可能会进一步详细说明正则表达式。