复制到另一个字符串时,如何忽略字符串中/ * * /之间的字符?
string str1 = "/*TODO:if*/";
如何忽略/ ** /之间的字符,新字符串将如下所示:
string str2 = "/**/";
我不允许使用任何库函数!
答案 0 :(得分:1)
string str2 = Regex.Replace(str1, @"/\*.*\*/", "/**/");
使用正则表达式,您可以捕获/*[anything]*/
的所有实例,并将其替换为您想要的文本:/**/
。但是,这将非常贪婪。如果你有字符串/*foo*/bar/*baz*/
,这将会吃掉所有字符串。
string str2 = Regex.Replace(str1, @"/\*.+?\*/", "/**/");
通过将其更改为惰性正则表达式,将返回字符串/**/bar/**/
。
鉴于上面的编辑,通过简单的索引搜索,这也可以在没有Regex的情况下完成 - 尽管它是一个贪婪的替代品。
string str2 = str1.Substring(0, str1.IndexOf("/*")) + "/*" + str1.Substring(str1.LastIndexOf("*/"));
这只是在第一个/*
之前的所有内容,然后是最后一个*/
之后的所有内容。
答案 1 :(得分:-1)
我不确定您是否可以使用库函数,因为所有函数本质上都是库函数。我认为这里的限制是你不能引入一个尚未在新项目中导入的库。没关系,我们可以做到这一点蹒跚。 Type
string
具有Split
功能,并且我们可以将它弄脏并使用类似1995年的版本。我没有测试这些但是你应该和他们一起走好路。说实话,这是一个有趣的小练习。
鉴于:string str1 = "Stufftokeep/*TODO:if*/StufftokeepAgain";
string[] crazyHomework = str1.Split('/');
string result = string.Empty;
foreach(string s in crazyHomework)
{
if(s.IndexOf('*') == -1)
result += s + " "; //added a space to keep them separate
}
只使用System
函数即可实现这一目标。如果做不到这一点,你可以将string
变为array
type
char
string
{无论如何都是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();
}
。
string
如果1.2em
中没有空格,那么你会在那个问题上遇到一些空间问题。
答案 2 :(得分:-1)
尝试此代码( 不使用任何库函数):
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);
}
答案 3 :(得分:-1)
快速而肮脏
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;