我必须解析字符串才能创建PathSegmentCollection。该字符串由逗号和/或(任意)空格(如换行符,制表符等)分隔的数字组成,也可以使用科学记数法编写该数字。从字符串中提取数字
这是一个例子:"9.63074,9.63074 -5.55708e-006 0 ,0 1477.78"
而且要点是:P1(9.63074,9.63074),P2(-0,555708,0),P3(0,1477.78)
要提取数字我使用正则表达式:
Dim RgxDouble As New Regex("[+-]?\b[0-9]+(\.[0-9]+)?(e[+-]?[0-9]+)?\b")
Dim Matches As MatchCollection = RgxDouble.Matches(.Value)
Dim PSegmentColl As New PathSegmentCollection
Dim PFigure As New PathFigure
With Matches
If .Count < 2 OrElse .Count Mod 2 <> 0 Then Exit Sub
PFigure.StartPoint = New Point(.Item(0).Value, .Item(1).Value)
For i As UInteger = 2 To .Count - 1 Step 2
Dim x As Double = .Item(i).Value, y As Double = .Item(i + 1).Value
PSegmentColl.Add(New LineSegment With {.Point = New Point(x, y)})
Next
End With
它的工作原理,但我必须解析大约十万(或更多)字符串,并以这种方式太慢。我想找到一个更高效的解决方案,而大多数时候这些数字并不是用科学计数法编写的,如果您认为这是更好的方法,那么使用C/C++编写的使用C/C++编写的程序集就没有问题不是托管代码或C#不安全代码。
您应该添加具有感兴趣语言的标签 - 我不认为很多人将“字符串”作为主题进行跟踪,而许多人则遵循C# ,VB或C++(或者您认为与您的问题相关的任何其他语言)。 – assylias 2012-04-07 10:02:47
完成(.NET和C++/CLI相关),谢谢。 – gliderkite 2012-04-07 10:10:02
顺便说一句,'-5.55708e-006'不是'-0,555708',它是'-0,00000555708'。 – Vlad 2012-04-07 10:13:34