首页 > 解决方案 > 使用 MyString.Remove(x,y) 从 C# 中的字符串中删除多个字符

问题描述

在我的服务器中运行程序(信标 检测代码)时,我将收到一个可变大小的字符串,名为io385

字符串长度可以根据检测到的信标数量而有所不同:

...

所以,有了这个,我的想法是删除任何无用的东西。即使字符串的大小可能不同,我总是想删除固定位置的字节(对于第一个信标,四个和最后两个;对于下一个信标,两个和最后两个)。

我开始手动删除 2信标字符串上的无用字节。但是,我想对此进行优化,以便无论字符串是 46 字节还是 xxxx 字节都可以自动工作(否则,我将不得不为每个可能的字符串长度手动编码字符删除过程)。

        string io385 = "11210000AAAA0000AAAA0000AAAA0000AAAA0A0A0A0ABF210000BBBB0000BBBB0000BBBB0000BBBB0B0B0B0BBF";
        string informacao = String.Copy(io385);
        
        informacao = informacao.Remove(0,4).Remove(40,2).Remove(40,2).Remove(80,2);
        
        
        int x = io385.Length;
        int y = informacao.Length;
        Console.WriteLine("Original String: {0}", io385); 
        Console.WriteLine("Copied String: {0}", informacao);
        Console.WriteLine("Original String length: {0}", x);
        Console.WriteLine("Copied String length: {0}", y);

标签: c#.netstringteltonika

解决方案


给定

public static IEnumerable<string> GetStuff(string input)
{
    Console.WriteLine(input.Length);
    if (input.Length == 46)
        yield return input.Substring(4, 40);
    else
        for (var i = 0; i < input.Length; i += 44)
            yield return input.Substring(i + 2, 40);
}

用法

var input = "xxxx1234567890123456789012345678901234567890xx";
var input2 = "xx1234567890123456789012345678901234567890xxxx1234567890123456789012345678901234567890xxxx1234567890123456789012345678901234567890xxxx1234567890123456789012345678901234567890xx";
Console.WriteLine(string.Join("\r\n", GetStuff(input)));
Console.WriteLine();
Console.WriteLine(string.Join("\r\n", GetStuff(input2)));

输出

46
1234567890123456789012345678901234567890

176
1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
1234567890123456789012345678901234567890
1234567890123456789012345678901234567890

完整的演示在这里


推荐阅读