2012-01-06 12 views
1

私はこのような文字列をHAVA:8文字列を4つの変数に分割するにはどうすればよいですか?

var id = "01020304"; 

は、私は、PRと呼ばれる4つの変数にPAを、これを分割することができる簡単な方法はあります、FO、それは各変数は、文字列の2つの文字を持っている必要があります。それが存在する場合、エレガントなソリューションを探しています。

+2

に簡略化することができ、 pa、foという意味で、より意味のある意味で答えることができます! –

+0

サブストリングを使ってみましたが、ここではすばらしい解決策が常に出てくる賢い人がいることを知っています。誰もが常に助けのためにアップヴォートを取得します。 –

+0

4つの異なる変数(配列などとは対照的に)がある場合、どのようにして部分文字列への4つの別々の呼び出しより優れたものになりますか? –

答えて

5

あなたは4つの異なる変数を持っているので、あなたがはるかにエレガントなサブストリングを使用するよりも取得することはできません:あなたは4の配列のために

var pr = id.Substring(0, 2); 
var pa = id.Substring(2, 2); 
var fo = id.Substring(4, 2); 
var it = id.Substring(6); 

探していました2文字の部分文字列を使用すると、より魅力的になります。

var parts = new string[4]; 
for (int i = 0 ; i != parts.Length ; i ++) { 
    parts[i] = id.Substring(2*i, 2); 
} 

EDIT:同じでLINQの式で行うことができます。

var parts = Enumerable 
    .Range(0, id.Length/2) 
    .Select(i => x.Substring(2*i, 2)) 
    .ToArray(); 
+1

私はあなたのループ構造も巧妙なLINQクエリを使って行うことができると確信しています... – Oded

+2

@Odedあなたはおそらく正しいでしょう。しかし、思考せずにこの構文LINQを書くことができない場合、私はそれが読書のままに余りにも空想的になるだろうと確信しています:) – dasblinkenlight

+0

絶対に - 私は_or_読書を書いています。 – Oded

6

あなたはSubstringを使用することができます。

pr = id.Substring(0, 2); 
pa = id.Substring(2, 2); 
fo = id.Substring(4, 2); 
it = id.Substring(6, 2); 
4

あなたは常に8つの文字の入力を持ち、常に4つの変数を要求しようとしている場合は、単にSubstring(...)方法で文字列を分割することができます:

var id = "01020304"; 
string pr = id.Substring(0, 2); 
string pa = id.Substring(2, 2); 
string fo = id.Substring(4, 2); 
string it = id.Substring(6, 2); 

そうしないと、あなたはforループを実行し、一度に2つの文字をオフに分割する方法を採用することができます。ここで

3

は、この形式の文字列をサポートするループ、任意の長さを持つソリューションです:

string id = "01020304"; 
int length = id.Length; 

int[] holder = new int[length/2]; 

for (int i = 0; i < length/2; i++) { 
    holder[i] = id.Substring(i*2, 2); 
} 
+0

これは奇数長の文字列で動作しますか? – AidanO

+0

奇数の長さの文字列では、最後の文字は無視されます。 – Tom

5

正規表現を試してみてください。

var id = "01020304"; 
string pat = "(?:(\\d{2}))"; 

var result = Regex.Split(id, pat).Where(p=>p!=string.Empty); 
foreach (var t in result) 
{ 
    Console.WriteLine(t); 
} 
1

ここではLinqを使用したバージョンです。

興味深いことに、組み込み演算子だけではこれほど簡単ではありません。ちょうど.NETフレームワークが付属してLINQの拡張メソッドを使用して、以下のバージョン:

var result = "01020304".ToCharArray(). 
      Select((c,i) => new { idx = i % 2 == 1 ? i - 1 : i, ch = c }). 
      GroupBy(e => e.idx, 
       (k,g) => new String(g.Select(e => e.ch).ToArray())); 

あなたがmorelinq Extensionsを使用している場合は、名前がPRを教えている場合、クエリは

var result = "01020304".ToCharArray(). 
        Batch(2).Select(ca => new String(ca.ToArray())); 
関連する問題