2010-10-16 6 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

Hmm .. приятный идея. Благодаря! :) – bretddog

+0

Вау, я не ожидал узнать что-то полезное из этого вопроса. :) Действительно хороший материал. Раньше я никогда не делал таких расширений, поэтому для меня это станет отличным инструментом. – bretddog

+0

+1 для показа «AsReadOnly()» –

0

На каждой из ваших линий есть возврат каретки и линия подачи. символ 10 и символ 13 объединяют их в строку и разделяют, и вы получите то, что вам нужно.

+0

Cheers! Я как-то знал это смутно, действительно искал хороший пример кода. Но спасибо! – bretddog

Смежные вопросы