字符串中的和数

时间:2015-04-28 13:23:55

标签: vb.net

Dim strOrig = "192/8' 33/5' 76/24' 17/12'"

大家好,我想在" /"之前获得每个号码。输出将是318。 关于如何实现它,我能想到的是:

1.通过寻找'间隔'来分割所有细分市场。作为每个段的终点并将它们放入一个数组中。例如。 (0)192/8,(1)33/5,(2)76/24等...

2.循环数组,查找斜杠" /"并获取它之前的数字并将其相加直到循环结束。例如。 (0)192,(1)33,(2)76等...

我想知道我的方法是否值得付出努力,因为我想学习比这更有效的方法。谢谢大家。

3 个答案:

答案 0 :(得分:6)

您可以使用LINQ:

Dim strOrig = "192/8' 33/5' 76/24' 17/12'"
Dim numbers = From word In strOrig.Split()
              Let number = word.Split("/"c).First().Trim().TryGetInt32()
              Where number.HasValue
              Select number.Value

Dim sum As Int32 = numbers.Sum()  ' 318

我已使用以下扩展程序尝试将字符串解析为Integer?

<Extension()>
Public Function TryGetInt32(Str As String) As Nullable(Of Int32)
    If Str Is Nothing Then Return Nothing
    Dim num As Int32
    If Int32.TryParse(Str, num) Then Return num
    Return Nothing
End Function

答案 1 :(得分:1)

Regex救援:

    Dim strOrig As String = "192/8' 33/5' 76/24' 17/12'"

    Dim sum as Integer = (From m As Match In Regex.Matches(strOrig, "(?<number>\d+?)/")
                          Select Convert.ToInt32(m.Groups("number").Value)
                         ).Sum()

答案 2 :(得分:0)

我能想到的最简单。

    Dim lst As List(Of String) = strOrig.Split("/").ToList

    lst.RemoveAt(lst.Count - 1)
    lst.Sum(Function(x) Convert.ToUInt16(x))