【问题标题】:How to split a string by x amount of characters如何按x个字符拆分字符串
【发布时间】:2012-01-08 00:37:05
【问题描述】:

我有一个程序,用户可以在其中输入字符串形式的数字列表。此数字列表始终是 8 的倍数。

所以列表可以包含 8、16、32、40、48 等数字。

我需要将该字符串拆分为每 8 个字符。

例如,假设用户输入了“1234123445674567”

如何将其拆分为字符串数组,其中 (0) 为“12341234”,(1) 为“45674567”

注意:数组的大小必须等于字符串的长度除以8。

像这样:

Dim stringArray(txtInput.Text.Length/8) as String

编辑:我知道我可以通过创建一个计算 8 个数字并将其拆分为数组的循环来做到这一点,但这会很长并且需要一些变量,而且我知道有一种更有效的方法可以做到这一点。我只是不知道语法。

【问题讨论】:

    标签: vb.net string


    【解决方案1】:

    这应该将字符串拆分为一个包含 8 个字符的子字符串的数组

    Dim orig = "12344321678900987"
    Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
    

    【讨论】:

    • 顺便说一句,VB很聪明,不需要[Select]
    • @minitech 我不知道 VB 语法 - 我从 C# 自动翻译了这个查询:)
    • 是的,没有人愿意再写 VB 了 :) 在 VB 中,. 之后的关键字不需要用 [] 转义。所以你可以改用.Select 让它更整洁。
    【解决方案2】:

    您可以使用For 循环和Substring

    Dim strings As New List(Of String)
    
    For i As Integer = 0 To Me.txtInput.Text.Length - 1 Step 8
        strings.Add(Me.txtInput.Text.Substring(i, 8))
    Next
    

    要将strings 列表转换为数组(如果您真的需要),您可以使用strings.ToArray()


    此外,您可以使用正则表达式和 LINQ 来制作精美的单线:

    Text.RegularExpressions.Regex.Matches(Me.txtInput.Text, ".{8}").Select(Function(x) x.Value)
    

    【讨论】:

    • 我比其他人更喜欢你的回答。特别是单线似乎非常有效。是否有任何额外的东西我必须添加或导入到我的程序中才能使其工作?我要测试它,如果它有效,我会接受你的回答
    • @MarkKramer:不,不应该。单行需要 LINQ,它仅在 .NET 3.5 及更高版本(VB 2008 或更高版本)中可用,但第一个几乎适用于所有事情。
    • 用户需要在他们的计算机上安装 LINQ 吗?或者只是我需要的东西,它带有 Visual Studio 来编译代码
    • @MarkKramer:它随 .NET 3.5 一起提供,所以如果您可以在编译时在应用程序中使用它,您可以在您的代码通常运行的任何其他计算机上使用它,是的。
    • 好的。另外,我还有一个问题要问你。我使用 Visual Studio 2010 pro 制作了我的程序。我的程序是否需要 .Net Framework 4.0 才能运行?
    【解决方案3】:
    Function slice(ByVal s as String) As String()
        Return (From c As String in s).ToArray()
    End Function
    

    【讨论】:

    • 我不确定这是解决问题的方法。传入的 slice 的长度在哪里?
    【解决方案4】:

    为了扩展已接受的答案,即使字符串不能被除数整除,这也会将字符串分成几部分

        Public Function SplitInParts(s As String, partLength As Integer) As IEnumerable(Of String)
            If String.IsNullOrEmpty(s) Then
                Throw New ArgumentNullException("String cannot be null or empty.")
            End If
            If partLength <= 0 Then
                Throw New ArgumentException("Split length has to be positive.")
            End If
            Return Enumerable.Range(0, Math.Ceiling(s.Length / partLength)).Select(Function(i) s.Substring(i * partLength, If(s.Length - (i * partLength) >= partLength, partLength, Math.Abs(s.Length - (i * partLength)))))
        End Function
    

    【讨论】:

      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      相关资源
      最近更新 更多