从Linq.Repeat中选择Substring

时间:2014-12-27 10:37:51

标签: c# linq select repeat

我有一个非常长的字符串,在c#中看起来像:

String currentStrings = "\\u0000\\u0001\\u0002\\u0003\\u0004"..."\\uFFFF";  //... means repeating

我需要获取每个子字符串的十六进制,例如:

String newString = "00000001000200030004"..."FFFF";

我写了linq:

var newString = String.Join("", Enumerable.Repeat(currentStrings, 16).Select(s => s.Substring(2, 4)));

但它会返回"00000000000000000000000"..."0000".

我知道,其原因 - 选择2,但我不知道如何在当前重复的子串中得到起始位置。

2 个答案:

答案 0 :(得分:7)

您可以在Split\u并使用string.Concat将它们连接起来:

string currentStrings = "\\u0000\\u0001\\u0002\\u0003\\u0004\\uFFFF";
var result = string.Concat(currentStrings.Split(new[] { "\\u" }, 
                                              StringSplitOptions.RemoveEmptyEntries)); 

// output
00000001000200030004FFFF

修改:获取chars

var chars = currentStrings
       .Split(new[] { "\\u" }, StringSplitOptions.RemoveEmptyEntries)
       .Select(x => (char) Convert.ToInt32(x, 16))
       .ToList();

答案 1 :(得分:1)

你需要位置的子串:2,8,...,6 * N - 4,其中N是字符串中的一些unicode实体。

嗯,在LINQ:

var N = currentStrings.Length / 6; // each entity has 6 characters long
var substrings = Enumerable.Range(1, N)
                           .Select(n => 6 + n - 4)
                           .Select(n => currentStrings.Substring(n, 4));

var result = string.Join("", substrings);