Vb.net 在VB中定位并提取多行字符串中包含特定文本的行

Vb.net 在VB中定位并提取多行字符串中包含特定文本的行,vb.net,visual-studio-2015,Vb.net,Visual Studio 2015,我有来自服务器的数据,该服务器构建了一个字符串(“所有价格”),保存在内存中,如下所示: 4440|4420|4430|1720160906 4430|4410|4420|1820160906 4420|4400|4410|1920160906 我想找到包含“1820160906”的行,并将其作为自己的变量隔离 为了寻找尽可能少的代码,我尝试了: MsgBox(File.ReadAllLines(all_prices).FirstOrDefault(Function(x) x.Contain

我有来自服务器的数据,该服务器构建了一个字符串(“所有价格”),保存在内存中,如下所示:

4440|4420|4430|1720160906
4430|4410|4420|1820160906
4420|4400|4410|1920160906
我想找到包含“1820160906”的行,并将其作为自己的变量隔离

为了寻找尽可能少的代码,我尝试了:

 MsgBox(File.ReadAllLines(all_prices).FirstOrDefault(Function(x) x.Contains("1820160906")))


但是上述方法都不起作用

在使用
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"))
模块扩展
公共迭代器函数ReadLines(作为字符串输入)作为IEnumerable(字符串的)
使用r=新的StringReader(输入)
尺寸线=r.读线()
而线不是什么
生产线
line=r.ReadLine()
结束时
终端使用
端函数
端模块
Dim match=all_prices.ReadLines().FirstOrDefault(函数(x)x.Contains(“1820160906”))

另外,使用
EndsWith
而不是
Contains
会更有效。

在使用
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"))
模块扩展
公共迭代器函数ReadLines(作为字符串输入)作为IEnumerable(字符串的)
使用r=新的StringReader(输入)
尺寸线=r.读线()
而线不是什么
生产线
line=r.ReadLine()
结束时
终端使用
端函数
端模块
Dim match=all_prices.ReadLines().FirstOrDefault(函数(x)x.Contains(“1820160906”))
另外,使用
EndsWith
而不是
Contains
会更有效