2012-07-26 76 views
3

我有一個字符串,如s = "abcdefgh"。我想分裂的字符數如下:將字符串拆分爲無定界符的數組

a(0)="ab" 
a(1)="cd" 
a(2)="ef" 
a(3)="gh" 

有人可以告訴我如何做到這一點?

+0

什麼是你的標準分割?每當角色改變?每第二個角色? – mellamokb 2012-07-26 18:27:52

+3

示例不明確。你想分裂每2個字符或拆分,每當下一個字符不相同的前一個? – Eddy 2012-07-26 18:27:53

+1

例如,你會如何分割「abbcdccceeee」? (你的問題沒有太多說明你想要做什麼......) – 2012-07-26 18:28:00

回答

2

您可以使用正則表達式來拆分爲兩個字符組:

Dim parts = Regex.Matches(s, ".{2}").Cast(Of Match)().Select(Function(m) m.Value) 

演示:http://ideone.com/ZVL2a(C#)

+1

'Select'周圍的'[']'是不必要的。否則,這也是我的做法。請注意'.'不匹配*每個*字符,除非您指定'SingleLine'標誌。 – 2012-07-26 18:45:40

+0

@KonradRudolph:謝謝。我先用C#編寫它,並使用在線轉換器。 VB.Net並不是很好:)奇怪的是,當我試圖做一個VB.Net示例時,我得到了內部錯誤和關於'System.Linq'不是有效庫的註釋:http:// ideone .COM/KlCAu。我做錯什麼了嗎? – mellamokb 2012-07-26 18:47:16

+2

單聲道的VB.NET編譯器不幸是一個失敗的原因。它完全**不可用。我發現可惜,因爲我最初來自VB,但我沒有預見到情況會很快發生變化,所以如果您想爲非Windows平臺編寫代碼,您基本上被迫使用C#。也就是說,你在ideone上的VB代碼包含一個小錯誤,'part as var'是錯誤的,它應該是'For Each part',或者'... part As Match'(然後'Cast'是不必要的)。但是這不會解決內部編譯器錯誤。 – 2012-07-26 18:50:26

1

拆分每2個字符,是我想你想

Dim s As String = "aabbccdd" 

    For i As Integer = 0 To s.Length - 1 Step 1 
     If i Mod 2 = 0 Then 
      Console.WriteLine(s.Substring(i, 2)) 
     End If 
    Next 
+3

爲什麼不簡單地增加步數爲2而不是使用附加檢查? – 2012-07-26 18:47:41

+0

是的,那會更好 – 2012-07-26 18:48:31

2

下面是不需要編寫循環的Linq方法:

Const splitLength As Integer = 2 
    Dim a = Enumerable.Range(0, s.Length \ splitLength). 
     Select(Function(i) s.Substring(i * splitLength, splitLength)) 
+1

+1我正在寫完全一樣的東西。意識到這會炸燬奇數長度的字符串(因爲大多數其他答案也是如此) – 2012-07-26 18:52:13

+1

@lc你確定嗎?我在2,3,4,5和6測試了它,它似乎總是工作正常。我發現的唯一問題是如果原始字符串的長度不是分割長度的精確倍數 - 在這種情況下,最後幾個字符被省略。 – Antagony 2012-07-26 18:58:00

+0

其實你是對的,它不會炸燬(我正在考慮使用天花板功能來獲得最後一位)。它*會*然而如你所說的那樣省略最後一點。 – 2012-07-26 19:03:06

0

我你會用一個List(Of String)相反,它簡化了它:

Dim s = "aabbccdde" ' yes, it works also with an odd number of chars ' 
Dim len = 2 
Dim list = New List(Of String) 
For i = 0 To s.Length - 1 Step len 
    Dim part = If(i + len > s.Length, s.Substring(i), s.Substring(i, len)) 
    list.Add(part) 
Next 
Dim result = list.ToArray() ' if you really need that array '