2014-11-03 131 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)