我有来自服务器的数据,这些数据构建了一个字符串(' all_prices')保存在内存中,如下所示:
4440|4420|4430|1720160906
4430|4410|4420|1820160906
4420|4400|4410|1920160906
我想找到包含" 1820160906"的行。并将其作为自己的变量。
为了寻找最轻量的代码,我尝试了:
MsgBox(File.ReadAllLines(all_prices).FirstOrDefault(Function(x) x.Contains("1820160906")))
和
all_prices(Of String).FirstOrDefault(Function(x) x.Contains("1820160906"))
和
all_prices.FirstOrDefault(Function(x) x.Contains("1820160906"))
但以上都没有工作
答案 0 :(得分:2)
在使用FirstOrDefault
查找匹配行之前,您需要将数据拆分为行。
Dim lines = all_prices.Split({vbCrLf, vbCr, vbLf}, StringSplitOptions.None)
Dim match = lines.FirstOrDefault(Function(x) x.Contains("1820160906"))
如果你想要一个单行(忽略扩展方法的行:-),你可以创建一个扩展方法并使用它:
Module StringExtensions
<Extension>
Public Iterator Function ReadLines(input As String) As IEnumerable(Of String)
Using r = New StringReader(input)
Dim line = r.ReadLine()
While line IsNot Nothing
Yield line
line = r.ReadLine()
End While
End Using
End Function
End Module
Dim match = all_prices.ReadLines().FirstOrDefault(Function(x) x.Contains("1820160906"))
此外,使用EndsWith
代替Contains
会更有效。