如何在从一个字符串复制到另一个字符串时忽略字符-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;