如何从字符串中提取字符范围

时间:2012-02-04 17:12:54

标签: c# .net string

如果我有一个如下字符串:

 String myString = "SET(someRandomName, \"hi\", u)"; 

我知道"SET("将始终存在于字符串中,但"someRandomName"的长度未知,我将如何将"("中的所有字符删除到第一个实例"""的?所以要重新迭代,我想从"SET(someRandomName, \""中删除这个子字符串:myString

我如何在C#.Net中执行此操作?

编辑:我不想为此使用正则表达式。

3 个答案:

答案 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个字符的硬编码,您可以改变它以跳过包含它们的数组中的字符。