如何将八个字符串拆分为四个变量?

时间:2012-01-06 11:45:51

标签: c#

我有这样的字符串:

var id = "01020304";

有没有一种简单的方法可以将它分成四个变量pr,pa,fo,它每个变量都需要有两个字符串。寻找一个优雅的解决方案,如果它存在。

6 个答案:

答案 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()));