2010-10-16 38 views
0

当我尝试将一个字符串拆分为一个字符串列表,其中每个元素表示一个初始字符串的行时,我会在每行的开始处得到“方形”字符,我认为这是一个换行符或其他东西,除了第一行。我怎样才能避免这种情况?我的代码如下:如何分割多行字符串?

Dim strList as List(Of String) 
If Clipboard.ContainsText Then 
    strList = Clipboard.GetText.Split(Environment.NewLine).ToList 
End If 

回答

4

我发现读一个字符串的线条相当可靠的方法是使用一个StringReader

Dim strList As New List(Of String) 
Using reader As New StringReader(Clipboard.GetText()) 
    While reader.Peek() <> -1 
     strList.Add(reader.ReadLine()) 
    End While 
End Using 

也许这是奇怪的;我不知道。不过,这很好,因为它可以让你免于处理不同系统之间表示换行符的不同方式(或者在文件,相同系统之间)。

考虑这一步,似乎你可以做自己一个忙,在一个可重复使用的扩展方法包装这个功能:

Public Module StringExtensions 
    <Extension()> _ 
    Public Function ReadAllLines(ByVal source As String) As IList(Of String) 
     If source Is Nothing Then 
      Return Nothing 
     End If 

     Dim lines As New List(Of String) 
     Using reader As New StringReader(source) 
      While reader.Peek() <> -1 
       lines.Add(reader.ReadLine()) 
      End While 
     End Using 

     Return lines.AsReadOnly() 
    End Function 
End Module 

那么你的代码来读取剪贴板中的行只是看起来像这样:

Dim clipboardContents As IList(Of String) = Clipboard.GetText().ReadAllLines() 
+0

嗯..好主意。谢谢! :) – bretddog 2010-10-16 19:55:32

+0

哇,我没想到从这个问题中学到了一些有用的东西。 :)真的很好的东西。我以前从未做过这种扩展,所以对我来说这是一个很好的工具。 – bretddog 2010-10-16 20:35:33

+0

+1显示“AsReadOnly()” – 2010-10-16 23:16:05

0

在每条线上都有一个回车符和换行符。字符10和字符13将它们组合成一个字符串并拆分,您将获得所需的内容。

+0

干杯!我有点模糊地知道,真的是在寻找一个很好的代码示例。但是,谢谢! – bretddog 2010-10-16 20:39:53