我哈瓦一个字符串是这样的:如何将八个字符的字符串分成四个变量?
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