2015-04-28 41 views
0
Dim strOrig = "192/8' 33/5' 76/24' 17/12'" 

大家好,我想获取每个数字之前的“/”。输出将是318. 关于如何实现它,我能想到的是:字符串内的总数字

1.通过查找“间距”作为每个段的终点并将它们放入数组中,分离所有段。例如。 (0)192/8,(1)33/5,(2)76/24 etc ...

2.通过循环数组,查找斜杠“/”并获取之前的数字和sum直到循环结束。例如。 (0)192,(1)33,(2)76等...

我想知道我的方法是否值得我努力,因为我想了解更多有效的方法。谢谢大家。

+0

是这始终是格式化? (例如数字/数字) – nevra

+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 
+0

(不要忘记那个LINQ中的VB.NET行续缀下划线) – valverij

+1

@valverij:VS 2010不需要 –

+0

在'Integer'上选择'Int32'有什么特别的理由吗? – asawyer

0

最简单的我能想到的。

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

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

最简单的方法不起作用? –

+0

有关拆分的一点工作,是的。 – Fjodr

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()