排序字符串数组

卢卡·鲁杰里(Luca Ruggeri)

我以以下格式输入了字符串

"[1_5,3,7,1],[1_2,4,1,9],[],[1_1,,4,,,9,2]"

我需要获取的是相同的字符串,但_排序后的数字是

"[1_1,3,5,7],[1_1,2,4,9],[],[1_1,2,4,9,,,]"
Dim tmprequestedArea_selectionAreaIn As String = "[1_5,3,7,1],[1_2,4,1,9],[],[1_1,,4,,,9,2]"

tmprequestedArea_selectionAreaIn = Regex.Replace(requestedArea_selectionAreaIn,"\],\[","#")
tmprequestedArea_selectionAreaIn = Regex.Replace(tmprequestedArea_selectionAreaIn,"\[|\]","")

bracList.AddRange(tmprequestedArea_selectionAreaIn.Split(New Char() {"#"c}, StringSplitOptions.None ))

If sortNumber Then 
    'Split braclist by _ and puts the value in strList 
    'If after _ is only one number put only that number, else split it by char "," and put in strList the join of the split by , array
    'Sort the array
    'in previous example strList will contain a,b,c in position 0 and _d_f (instead of f,d) in position 1
    For i As Integer = 0 To bracList.Count -1
        Dim tmp As String()
        Dim tmpInt As New System.Collections.Generic.List(Of Integer) 
        If Not(String.IsNullOrEmpty(bracList(i))) Then 
            Dim tmpRequested As String = bracList(i).Split(New Char() {"_"c})(0)
            Dim tmpSelection As String = bracList(i).Split(New Char() {"_"c})(1)

        If tmpSelection.Contains(",") Then
            tmp = tmpSelection.Split(New Char() {","c})
            For j As Integer = 0 To tmp.Length -1
                tmpInt.Add(Convert.toInt32(tmp(j)))
            Next
            tmpInt.Sort
            strList.Add("["  + tmpRequested + "_" + String.Join(",",tmpInt ) + "]")
        Else
            strList.Add("[" +  tmpRequested + "_" + tmpSelection + "]" )
        End If
        Else
            strList.Add("[]")
        End If
    Next i

我正在寻找一种更好的管理方式。

吉米

尝试一下,以替代您现在正在做的事情。

给定此输入字符串:

Dim input As String = "[1_5,3,7,1],[1_2,4,1,9],[],[1_1,,4,,,9,2]"

注意:这还将处理不更改的十进制值。例如,

"[1_5.5,3.5,7,1],[1_2.564,4,2.563,9],[],[1_1,,4.23,,,9.0,2.45]"

您可以使用以下模式提取方括号的内容:\[(.*?)\]并使用Regex.Matches返回匹配该模式的所有子字符串MatchCollection

然后,在处理零件时,使用StringBuilder作为容器来重建字符串

Imports System.Linq
Imports System.Text.RegularExpressions

Dim pattern As String = "\[(.*?)\]"
Dim matches = Regex.Matches(input, pattern, RegexOptions.Singleline)
Dim sb As StringBuilder = New StringBuilder()

For Each match As Match In matches
    Dim value As String = match.Groups(1).Value
    If String.IsNullOrEmpty(value) Then
        sb.Append("[],")
        Continue For
    End If
    Dim sepPosition As Integer = value.IndexOf("_"c) + 1
    sb.Append("[" & value.Substring(0, sepPosition))
    Dim values = value.Substring(sepPosition).Split(","c)
    sb.Append(String.Join(",", values.Where(Function(n) n.Length > 0).OrderBy(Function(n) CDec(n))))
    sb.Append(","c, values.Count(Function(n) n.Length = 0))
    sb.Append("],")
Next

Dim result As String = sb.ToString().TrimEnd(","c)

如果您不了解LINQ,这就是它的作用:

String.Join(",", values.Where(Function(n) n.Length > 0).OrderBy(Function(n) CDec(n)))

values是由生成的字符串数组String.Split()

values.Where(Function(n) n.Length > 0):创建一个Enumerable(Of String)values Where的内容,n是长度的串> 0
我可以写values.Where(Function(n) Not String.IsNUllOrEmpty(n))。

.OrderBy(Function(n) CDec(n)))Enumerable(Of String)使用转换为Decimal的字符串值对结果进行排序,并生成一个Enumerable(Of String),并将其传递回String.Join(),以重建字符串,并","c在各部分之间添加一个char()。

values.Count(Function(n) n.Length = 0):计算values具有Lenght = 0(空字符串)的元素这是用逗号表示的空元素的数量,附加在部分字符串的末尾。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

排序字符串数组

来自分类Dev

排序字符串数组

来自分类Dev

字符串数组排序C

来自分类Dev

对字符串的内部数组排序

来自分类Dev

从字符串数组排序日期

来自分类Dev

字符串日期排序数组

来自分类Dev

按数字排序字符串数组

来自分类Dev

排序字符串数组的正确方法

来自分类Dev

快速排序字符串数组列表

来自分类Dev

字符串日期排序数组

来自分类Dev

根据字符串将数组排序为新数组

来自分类Dev

对字符串数组和整数数组进行排序

来自分类Dev

根据对象数组对字符串数组进行排序

来自分类Dev

根据数字数组对字符串数组进行排序

来自分类Dev

根据字符串将数组排序为新数组

来自分类Dev

用波兰语字符对字符串数组进行排序

来自分类Dev

java根据库尔德字符对字符串数组进行排序

来自分类Dev

从任何字符位置对字符串数组进行排序

来自分类Dev

带特殊字符的字符串数组排序

来自分类Dev

Powershell 按特定字符对字符串数组进行排序

来自分类Dev

字符串排序

来自分类Dev

使用基于字符串中的字符的比较器对字符串数组进行排序

来自分类Dev

用Unicode字符串对数组排序

来自分类Dev

对包含字符串,日期和数字的数组进行排序

来自分类Dev

排序包含Å,Ä和Ö的字符串数组-Swift

来自分类Dev

根据长度对字符串数组进行排序

来自分类Dev

Linq组字符串数组按计数和排序

来自分类Dev

字符串数组排序的复杂性

来自分类Dev

按元素长度对字符串数组进行排序