2012-01-08 8 views
8

私は、ユーザーが数字のリストを文字列の形で入力するプログラムを持っています。この数字のリストは常に8の倍数です。文字列をx個の文字数に分割する方法

したがって、リストには8,16,32,40,48などの数字を入れることができます。

私はその文字列を8文字ごとに分割する必要があります。

例えば、ユーザは、私が(0) "12341234" であると、(1) "45674567"

ノートで文字列の配列に分割することができますどのように "1234123445674567"

に入ったと言います:

Dim stringArray(txtInput.Text.Length/8) as String 

エディ:アレイのサイズは次のように8

で割った文字列の長さに等しくなければなりませんt:8つの数値を数え、それを配列に分割するループを作ることでこれを行うことができるのは分かっていますが、それは時間がかかり、いくつかの変数をとり、効率的な方法があることがわかります。私は構文を知らない。

答えて

4

Dim orig = "12344321678900987" 
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8)) 
+4

ところで、VBは '[選択]'が必要ないほどスマートです。 – Ryan

+0

@minitech私はVB構文を知らない - C#から自動的にこのクエリを翻訳した: – dasblinkenlight

+3

ええ、誰もVBをもう書きたくない:) VBのキーワードは '.'の後に' ['でエスケープする必要はない。 ] 'はすべてです。ですから、代わりに '.Select'を使って少し綺麗にすることができます。 – Ryan

4

あなたはForループとSubstring使用することができます:あなたはstrings.ToArray()を使用することができます(あなたが本当に1が必要な場合)配列にstringsリストを変換するには

Dim strings As New List(Of String) 

For i As Integer = 0 To Me.txtInput.Text.Length - 1 Step 8 
    strings.Add(Me.txtInput.Text.Substring(i, 8)) 
Next 

を。


また、あなたは空想のワンライナーのための正規表現とLINQを使用することができます。これは8文字列の配列に文字列を分割する必要があり

Text.RegularExpressions.Regex.Matches(Me.txtInput.Text, ".{8}").Select(Function(x) x.Value) 
+0

私はあなたの答えが他の人よりも好きです。特に1ライナーは非常に効率的です。それを機能させるためにプログラムに追加またはインポートする必要がある余分なものはありますか?私はそれを試すつもりだし、うまくいくならあなたの答えを受け入れるよ –

+1

@マーククレイマー:いいえ、ありません。 One-LinerにはLINQが必要です.LINQは.NET 3.5以降でのみ使用できますが(VB 2008以降)、最初のものは実質的にすべてで動作します。 – Ryan

+0

LINQはユーザーがコンピュータにインストールする必要がありますか?コードをコンパイルするためにVisual Studioに付属している鉱山で必要なものがあります。 –

0
Function slice(ByVal s as String) As String() 
    Return (From c As String in s).ToArray() 
End Function 
+2

これは問題の解決策ではないかと思います。渡されたスライスの長さはどこですか? –

0

受け入れられた答えを拡張するために、これは、文字列が除数で割り切れない場合でも文字列を分割します

Public Function SplitInParts(s As String, partLength As Integer) As IEnumerable(Of String) 
     If String.IsNullOrEmpty(s) Then 
      Throw New ArgumentNullException("String cannot be null or empty.") 
     End If 
     If partLength <= 0 Then 
      Throw New ArgumentException("Split length has to be positive.") 
     End If 
     Return Enumerable.Range(0, Math.Ceiling(s.Length/partLength)).Select(Function(i) s.Substring(i * partLength, If(s.Length - (i * partLength) >= partLength, partLength, Math.Abs(s.Length - (i * partLength))))) 
    End Function 
関連する問題