我有这样的字符串:
var id = "01020304";
有没有一种简单的方法可以将它分成四个变量pr,pa,fo,它每个变量都需要有两个字符串。寻找一个优雅的解决方案,如果它存在。
答案 0 :(得分:6)
您可以使用Substring
:
pr = id.Substring(0, 2);
pa = id.Substring(2, 2);
fo = id.Substring(4, 2);
it = id.Substring(6, 2);
答案 1 :(得分:5)
由于你有四个不同的变量,你不能比使用Substring更优雅:
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();
答案 2 :(得分: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);
}
答案 3 :(得分: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
循环并一次拆分两个字符。
答案 4 :(得分: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);
}
答案 5 :(得分: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,则可以将查询简化为
var result = "01020304".ToCharArray().
Batch(2).Select(ca => new String(ca.ToArray()));