如何删除所有出现的字符/子字符串?

时间:2015-01-15 13:13:21

标签: c# string .net-micro-framework

我正在使用.NET Micro Framework 4.1,据我所知,它没有实现Regex类或String.Replace / String.Remove方法。

我有一个字符串定义为:

string message = "[esc]vI AM A STRING. [esc]vI AM A STRING AND DO LOTS OF THINGS...";

有没有办法从此字符串中删除[esc]v的所有匹配项?在NetMF中使用转义字符(0x1B)后跟0x76的位置?

这有希望让我:

string message = "I AM A STRING. I AM A STRING AND DO LOTS OF THINGS...";

我想过可能使用String.Split()方法,但这似乎对内存要求太高,因为代码运行在一个小型的NETMF板上。

3 个答案:

答案 0 :(得分:2)

扩展程序?试试这个

public static string Replace(this string stringToSearch, char charToFind, char charToSubstitute)
{        
    char[] chars = stringToSearch.ToCharArray();
    for (int i = 0; i < chars.Length; i++)
        if (chars[i] == charToFind) chars[i] = charToSubstitute;

    return new string(chars);
}

答案 1 :(得分:2)

使用

StringBuilder.Replace
StringBuilder.Remove 

在.NET Micro Framework版本2.5,3.0,4.0和4.1中为available

        public static string fixStr(string message, char c)
        {
          StringBuilder aStr = new StringBuilder(message);
          for (int i = 0; i < aStr.Length; i++)
          {
            if (aStr[i] == c)
            {
                aStr.Remove(i, 1);
            }
          }
          return aStr.ToString();
        } 

用法:

        string message = "" + (char)0x1B + (char)0x76 + "I AM A STRING. " + (char)0x1B + (char)0x76 + "I AM A STRING AND DO LOTS OF THINGS...";

        message = fixStr(message, (char)0x76);
        message = fixStr(message, (char)0x1B);

答案 2 :(得分:1)

我终于能够找到如何以另一种方式实现这一目标。

但是,我首先使用的方法类似于@ Filip的答案:

我用过:

String message = "[esc]vI AM A STRING. [esc]vI AM A STRING AND DO LOTS OF THINGS...";

byte [] msg = System.Text.Encoding.UTF8.GetBytes(message);
for(int i=0; i< msg.Length; i++)
{
    if (msg[i] ==0x1B || msg[i] == 0x76) msg[i] = 0x00;
}
//msg is now in byte[] format

然后我可以继续使用

将其重新转换为我的字符串
message = new string(System.Text.Encoding.UTF8.getChars(msg));

虽然,对于我的项目,我能够以byte[]格式保留它。


但是,根据我的情况,(因为我正在阅读一个串口 - 提到的问题,我知道并不认为这很重要 ),我能够简单地“停止”这些字符首先被输入到字符串中,使用:

if( buffer[0] !=0x1B && buffer[0] !=0x76)
{
    //add to string since it's not either
}

我能够做到这一点,因为'通缉'字符都是大写的,所以'v'永远不会出现在消息中。


但是,如果 删除char / substring,如果将来需要更好的方式,我仍然会感兴趣。