如果我有一个如下字符串:
String myString = "SET(someRandomName, \"hi\", u)";
我知道"SET("
将始终存在于字符串中,但"someRandomName"
的长度未知,我将如何将"("
中的所有字符删除到第一个实例"""
的?所以要重新迭代,我想从"SET(someRandomName, \""
中删除这个子字符串:myString
。
我如何在C#.Net中执行此操作?
编辑:我不想为此使用正则表达式。
答案 0 :(得分:7)
提供字符串将始终具有此结构,最简单的方法是使用String.IndexOf()
查找"
第一次出现的索引。 String.Substring()
然后为您提供原始字符串的适当部分。
同样,您可以使用String.LastIndexOf()
从字符串的 end 中查找第一个"
的索引。然后,您将只能提取样本中第二个参数("hi"
)的值。
你最终会得到这样的东西:
int begin = myString.IndexOf('"');
int end = myString.LastIndexOf('"');
string secondArg = myString.Substring(begin, end - begin + 1);
这将在"\"hi\""
中产生secondArg
。
更新:要删除部分字符串,请使用String.Remove()
方法:
int begin = myString.IndexOf('(');
int end = myString.IndexOf('"');
string altered = myString.Remove(begin + 1, end - begin - 1);
这将在"SET(\"hi\", u)"
中产生altered
。
答案 1 :(得分:1)
我假设您想要转换
SET(someRandomName, "hi", u)
成:
SET(u)
为此,您可以使用:
String newString = "SET(" + myString.Substring(myString.LastIndexOf(',') + 1).Trim();
一点一点解释:
myString.LastIndexOf(',')
将为您提供上一个,
字符的索引(位置)。将其递增1以获取SET
函数中第三个参数的起始索引。
myString.Substring(myString.LastIndexOf(',') + 1)
Substring
方法将消除指定位置以外的所有字符。在这种情况下,我们将删除所有内容(包括)最后,
。在上面的示例中,这将消除SET(someRandomName, "hi",
部分,并留下u)
。
Trim
只需删除u
之前的前导空格字符即可。
最后,我们将SET(
添加到我们的子字符串中(因为我们之前因Substring
而删除了它)。
修改:根据您在下面的评论(与您在问题中提出的内容相矛盾),您可以使用:
String newString = "SET(" + myString.Substring(myString.IndexOf(',') + 1).Trim();
答案 2 :(得分:1)
这非常糟糕,但这可以通过简单的linq语句实现您想要的效果。只是作为IndexOf
答案的替代。
string myString = "SET(someRandomName, \"hi\", 0)";
string fixedStr = new String( myString.ToCharArray().Take( 4 ).Concat( myString.ToCharArray().SkipWhile( c => c != '"' ) ).ToArray() );
产量:SET(“hi”,0)
注意:跳过是4个字符的硬编码,您可以改变它以跳过包含它们的数组中的字符。