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等...
我想知道我的方法是否值得付出努力,因为我想学习比这更有效的方法。谢谢大家。
答案 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))