我有一个非常长的字符串,在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,但我不知道如何在当前重复的子串中得到起始位置。
答案 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);