如何在从一个字符串复制到另一个字符串时忽略字符-c#

如何在从一个字符串复制到另一个字符串时忽略字符-c#,c#,C#,复制到另一个字符串时,如何忽略字符串中/**/之间的字符 string str1 = "/*TODO:if*/"; 如何忽略/**/之间的字符,使新字符串如下所示: string str2 = "/**/"; 我不允许使用任何库函数 string str2 = Regex.Replace(str1, @"/\*.*\*/", "/**/"); 使用正则表达式,您可以捕获/*[任何内容]*/的所有实例,并将其替换为所需的文本:/***/。然而,这将是非常贪婪的。如果你有字符串/*foo*/b

复制到另一个字符串时,如何忽略字符串中/**/之间的字符

string str1 = "/*TODO:if*/";
如何忽略/**/之间的字符,使新字符串如下所示:

string str2 = "/**/";
我不允许使用任何库函数

string str2 = Regex.Replace(str1, @"/\*.*\*/", "/**/");
使用正则表达式,您可以捕获
/*[任何内容]*/
的所有实例,并将其替换为所需的文本:
/***/
。然而,这将是非常贪婪的。如果你有字符串
/*foo*/bar/*baz*/
,这将吃掉所有的字符串

string str2 = Regex.Replace(str1, @"/\*.+?\*/", "/**/");
通过将其更改为惰性正则表达式,将返回字符串
/**/bar/**/

考虑到上面的编辑,这也可以在不使用正则表达式的情况下通过简单的索引搜索来完成——尽管这是一个贪婪的替代

string str2 = str1.Substring(0, str1.IndexOf("/*")) + "/*" + str1.Substring(str1.LastIndexOf("*/"));

这只需要第一个
/*
之前的所有内容,然后是最后一个
*/
之后的所有内容,我不确定不能使用库函数是否有意义,因为所有函数本质上都是库函数。我认为这里的限制是,您不能引入一个新项目中尚未导入的库。没关系,我们可以这样蹒跚而行。
类型
字符串
有一个
分割
功能,如果没有这个功能,我们可以将其变脏,并像1995年那样使用索引。我没有测试这些,但你应该在你的方式与他们。老实说,这是一个有趣的小运动

给定:
string str1=“Stufftokeep/*TODO:if*/StufftokeepAgain”

这使您只需使用
系统
功能即可到达目的地。否则,您可以将
字符串
变异为
类型
字符
的可爱的
数组
(反正都是
字符串

但是,如果
字符串中没有空格,则该字符串将出现一些空格问题

尝试此代码(它不使用任何库函数):

静态字符串格式字符串(字符串str)=>
从(str,“*/”)中删除(str,“/*”)后面的+substring;
静态int IndexOf(字符串str,字符串值)
{
for(int i=0;i=0;i--)
{
布尔发现=真;
对于(int j=0;j
又快又脏

string temp = null;
string str1 = "this shoudl remain/*TODO:if*/*/*testing again */-and so should this";
int x, y;
while ((x = str1.IndexOf("/*")) != -1)
{
    if ((y = str1.IndexOf("*/")) > x)
    {
        temp += str1.Substring(0, x + 2) + str1.Substring(y, 2);
        str1 = str1.Substring(y + 2);
        continue;
    }
    temp += str1.Substring(y, x);
    str1 = str1.Substring(x)
}
temp += str1;

你是否可能有类似于
“/*TODO:/*if*/”
?是的,我投票结束这个问题是因为“给我代码”可能是重复的,你没有说你在哪里卡住了,或者你做了什么,只是把问题贴出来并要求解决。您声明不能使用“库函数”,这意味着其目的是查看如何处理问题,而不只是调用执行该操作的函数。如果你解决问题的方法是在互联网上向陌生人寻求答案,那么你就是在欺骗自己。如果您尝试了某项功能,但被卡在某个特定的部件上,那么我认为寻求帮助是公平的。不使用任何库函数就可以做到这一点吗PI尝试了这个方法,效果非常好,但不幸的是,我没有大声使用任何库函数。正则表达式将无法处理字符串,例如“/*TODO:if*/textToKeep/*TODO:else*/”@看看我的答案。它不使用任何库函数。@BobyOneKenobi惰性正则表达式可以用于textToKeep示例,但无可否认,字符串替换方法不起作用。这相当贪婪。
string result = string.Empty;

bool copy = true;
char[] array = str1.ToCharArray()
foreach(char a in array)
{
   int i = array.IndexOf[a];
   if(a == "/" && array.IndexOf(a) != array.Length - 1 
   && 
   (array[a + 1] == '*' || array[a -1] == '*'))
   {
       copy = !copy;
   }
   if(copy)
      result += a.ToString();
}
static string FormatString(string str) =>
    RemoveAfter(str, "/*") + SubstringFrom(str, "*/");

static int IndexOf(string str, string value)
{
    for (int i = 0; i < str.Length - value.Length; i++)
    {
        bool found = true;

        for (int j = 0; j < value.Length; j++)
        {
            if (str[i + j] != value[j])
            {
                found = false;
                break;
            }
        }

        if (found)
        {
            return i;
        }
    }

    return -1;
}

static int LastIndexOf(string str, string value)
{
    for (int i = str.Length - value.Length; i >= 0; i--)
    {
        bool found = true;

        for (int j = 0; j < value.Length; j++)
        {
            if (str[i + j] != value[j])
            {
                found = false;
                break;
            }
        }

        if (found)
        {
            return i;
        }
    }

    return -1;
}

static string SubstringFrom(string str, string value)
{
    int startIndex = LastIndexOf(str, value);

    int length = str.Length - startIndex;
    char[] result = new char[length];

    for (int i = 0; i < length; i++)
    {
        result[i] = str[startIndex + i];
    }

    return new string(result);
}

static string RemoveAfter(string str, string value)
{
    int length = IndexOf(str, value) + value.Length;
    char[] result = new char[length];

    for (int i = 0; i < length; i++)
    {
        result[i] = str[i];
    }

    return new string(result);
}
string temp = null;
string str1 = "this shoudl remain/*TODO:if*/*/*testing again */-and so should this";
int x, y;
while ((x = str1.IndexOf("/*")) != -1)
{
    if ((y = str1.IndexOf("*/")) > x)
    {
        temp += str1.Substring(0, x + 2) + str1.Substring(y, 2);
        str1 = str1.Substring(y + 2);
        continue;
    }
    temp += str1.Substring(y, x);
    str1 = str1.Substring(x)
}
temp += str1;