2014-11-03 145 views
0

我试图分裂以下字符串子解析这个字符串

Dim value as String = "+1.0 A0 -256 B0 -2823" 'this is a line from a txtfile 

我想在字符串中以下3子分裂。

Dim value1 as String= "+1.0" 
Dim A0 as String = "-256" 
Dim B0 as String = "-2823" 

的字符串始终按以下格式:

+ ## A0 #### B0 ###

我知道我可以利用它实现value.Replacevalue.Substring,但我不知道具体如何。

我曾尝试这样的东西,但它没有工作

value1 = Value.Substring(0, "A0".IndexOf("A0")) 
+0

它看起来好像它们全部被空间隔开。因此,使用替换函数来替换A0和B0而不使用空格,然后在空格字符串上分割字符串,以便为每个元素分配字符串。 – Sorceri 2014-11-03 14:51:51

+4

只需按空格拆分字符串并在索引0,2,4中获取项目,而忽略索引1和3。 – 2014-11-03 14:53:50

+0

空格不同 – 2014-11-03 14:55:55

回答

1

NET包含强大的字符串拆分方法。源是由空格分隔,上和抓斗元件0,2和4从结果,以便分裂:

如果/当线路读取具有项之间的单个空格作为一个部分描述:

Dim value As String = "+1.0 A0 -256 B0 -2823" 

Dim split = value.Split(" "c) 
Dim val1 = split(0)   ' +1.0 
Dim A0 = split(2)    ' -256 
Dim B0 = split(4)    ' -2823 

如果/当可以有多个空格(如上面的代码示例中),你对让他们摆脱仍将允许String.Split评论:

Dim value As String = "+1.0 A0   -256 B0 -2823" 

Dim tmp = value.Replace(" ", "") ' remove spaces, preserve original just in case 
tmp = tmp.Replace("A0", " ")  ' replace A0 with space 
tmp = tmp.Replace("B0", " ") 
Dim split = tmp.Split(" "c)   ' split 

Dim val1 = split(0)     ' grab info 
Dim A0 = split(1) 
Dim B0 = split(2) 

任何字符,你肯定不会是在字符串中可以用于替代A0和B0。由于我们只是删除了空间,这似乎是最合乎逻辑的。

+0

空格是不同的,但我喜欢你的方法,我只是要取代所有空格替换(“”,“”),然后我用空格替换A0,用空格替换A0,它应该工作thx :) – 2014-11-03 15:04:46

+1

问题的种类随着编辑而改变,我正在'+ ## A0 #### B0 ###'看起来好像他们之间有一个空间 – Plutonix 2014-11-03 15:06:56

+0

对不起,这是我的错:) – 2014-11-03 15:12:01

0

每我的意见,使用替代和分裂

String s = "+1.0 A0 -256 B0 -2823"; 
      s = s.Replace("A0", "").Replace("B0", ""); 
      String[] allNumbers = s.Split(' '); 
+0

如果你downvote它,你应该给出一个理由,因为答案是有效的 – Sorceri 2014-11-03 14:57:18

+1

我没有downvote,但你应该将'Replace()'调用的结果分配回's'。 – 2014-11-03 14:57:19

+0

雅,只是一个typeo,固定的 – Sorceri 2014-11-03 14:58:23

2

你可以在这里使用String.Split相对于两个字符串( A0B0),这将是我认为最清晰的解决方案:

Dim value as String = "+1.0 A0 -256 B0 -2823" 
Dim values = value.Split({ " A0 ", " B0 " }, StringSplitOptions.None) 
1

你第一次尝试就是在正确的路线上。你只需要使用实际的字符串和值来找到物品的位置。当你有未潜在未知数量的空格,你需要useTrim事后删除空格:

Dim value As String = "+1.0 A0 -256 B0 -2823" 'this is a line from a txtfile 

    Dim value1 As String = value.Substring(0, value.IndexOf(" "c)) 
    Dim aPos As Integer = value.IndexOf("A0") 'Find the position of "A0" in the string 
    Dim bPos As Integer = value.IndexOf("B0") 'Find the position of "B0" in the string 
    Dim A0 As String = value.Substring(aPos + 2, bPos - (aPos + 2)).Trim 
    Dim B0 As String = value.Substring(bPos + 2).Trim 
1

如果要拆分,尝试拆分功能;)

斯普利特(表达式作为字符串,分隔符为字符串)作为字符串()

你想通过“”拆分你的表达式并从结果数组中获取第1,第3和第5个元素(第2个是“A0”,第4个是“B0”) 所以你的代码应该看起来像:

Option base 0  
' so we start counting at 0 

Dim results as String() 
results = Split(value," ") 
value1 = results(0) 
A0 = results(2) 
B0 = results(4)