如何将字符串分成多个字符串并重新构建它?

时间:2013-01-31 14:03:58

标签: vb.net string split

我有一个字符串,其中包含多个字符,例如"The quick fox jumped over the lazy dog",我想将它分成多个字符串,例如,每个字符串都有两个字符,然后我会对它们执行某个操作,而我我会重新加入他们,例如:

String(1) = "Th"
String(2) = "e "
String(3) = "qu"
String(4) = "ic"

等等......

如果字符串不能被分成两个字符的相等字符串(例如“Dad”),则它使最后一个字符串包含最后一个字母,例如:

String(1) = "Da"
String(2) = "d"

我尝试了以下代码来生成变量:

    Dim String(69) As String

    For i As Integer = 0 To String.Length - 1
        String(i) = "some text"
     Next

 Dim text As String
 For i As Integer = 0 To RichTextBox1.TextLength - 2 Step 2
 text = RichTextBox1.Text.Substring(i, 2)
 Next i

将sting(richtextbox1.text)划分为相同的部分,但是我无法对每个子字符串做任何事情。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以在索引上使用GroupBy

Dim twoLetterWords = "The quick fox jumped over the lazy dog".
        Select(Function(c, i) New With {.Char = c, .Index = i}).
        GroupBy(Function(x) CInt(Math.Floor(x.Index / 2))).
        Select(Function(g) String.Join("", g.Select(Function(x) x.Char)))

因此,如果您想要使用三个字母的字词,请将x.Index / 2更改为x.Index / 3

这里是调试器中的结果(ideone与VB不兼容)

enter image description here

  

但是我怎样才能在每个子串上做一些事情(例如   在第一个字符串中添加数字1,然后在第二个字符串中添加2,所以   在)?

我认为你不熟悉Linq。您可以使用简单的For Each来枚举查询,您可以将其实现为集合类型,f.e。使用创建新ToList的{​​{1}}。然后,您还可以使用List(Of String)访问每个字符串。或者您可以重写查询以首先添加您的号码(推荐):

要在前面添加序列中的字符串编号(本例中为1-19),请将上面查询的最后一行更改为:

For-Loop

结果:

enter image description here

答案 1 :(得分:0)

扩展Tim Schmelter's already good answer

Imports System.Runtime.CompilerServices

Module SplitTest
    Sub Main()
        For Each pair In "abcdef".Split(2)
            Console.WriteLine(pair)
        Next

        Console.ReadKey
    End Sub

    <Extension()>
    Public Function Split(ByVal source As String, ByVal length As Integer) _
               As IEnumerable(Of String)

        Return source.Select(Function(c, i) New With {c, i}) _
            .GroupBy(Function(t) t.i \ length) _
            .Select(Function(g) String.Concat(g.Select(Function(t) t.c)))
    End Function
End Module

您可以将linq打包到扩展中并像这样进行测试。


使用GroupBy的唯一问题是它可能不够聪明,不知道索引会一直增加。这意味着在产生任何结果之前需要枚举整个字符串。

由于VB.net没有yield return,我认为它可能仍然可以做到最好。


如果您的字符串非常很长,您可能需要使用一些c#,这样您就可以在读取整个字符串之前开始构建结果。

一个很好的例子是hosted here

答案 2 :(得分:0)

  1. 将字符串的长度除以2(如果有余数则记住+1)
  2. 了解迭代
  3. 了解SubString()