我哈瓦一個字符串是這樣的:如何將八個字符的字符串分成四個變量?
var id = "01020304";
有一個簡單的辦法可以分成四個變量稱爲PR,PA這一點,FO,其每一個變量都需要有字符串的兩個字符。尋找一個優雅的解決方案,如果它存在。
我哈瓦一個字符串是這樣的:如何將八個字符的字符串分成四個變量?
var id = "01020304";
有一個簡單的辦法可以分成四個變量稱爲PR,PA這一點,FO,其每一個變量都需要有字符串的兩個字符。尋找一個優雅的解決方案,如果它存在。
既然你有四個不同的變量,你不能得到比使用子串更優雅:
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);
}
編輯:同樣可以用LINQ表達式來實現:
var parts = Enumerable
.Range(0, id.Length/2)
.Select(i => x.Substring(2*i, 2))
.ToArray();
我相信你的循環構造也可以使用一個聰明的LINQ查詢來完成...... – Oded 2012-01-06 11:52:40
@Oded你可能是對的。但是如果你不能沒有想到地寫這個構造的LINQ,我敢打賭它太過於花哨,不能保持可讀性。:) – dasblinkenlight 2012-01-06 11:57:44
絕對不是 - 我不喜歡寫作或閱讀。 – Oded 2012-01-06 12:01:15
您可以使用Substring
:
pr = id.Substring(0, 2);
pa = id.Substring(2, 2);
fo = id.Substring(4, 2);
it = id.Substring(6, 2);
如果你總是將有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
循環和分裂關閉兩個角色在同一時間運行的方法。
嘗試正則表達式。
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);
}
這是一個使用Linq的版本。
有趣的是,只用內置的運算符就不那麼容易實現。下面的版本只使用LINQ的擴展方法來與NET框架:
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查詢可以簡化爲
var result = "01020304".ToCharArray().
Batch(2).Select(ca => new String(ca.ToArray()));
如果你告訴我們什麼名字PR, pa,fo和它的意思是,我們可以給你一個更多的語義含義的答案! – 2012-01-06 11:52:36
嘗試使用子串,但我知道這裏有一些聰明的人總是想出一些很棒的解決方案。每個人都樂意幫忙。 – 2012-01-06 12:03:01
當有4個不同的變量(而不是數組或類似的)時,怎麼會比4個獨立的子字符調用更好? – 2012-01-06 12:04:51