繁体   English   中英

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

[英]How to extract range of characters from a string

如果我有如下字符串:

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

我知道"SET("将始终存在于字符串中,但"someRandomName"的长度是未知的,我将如何 go 关于删除从"(""""的第一个实例的所有字符? -迭代,我想从myString中删除这个 substring: "SET(someRandomName, \""

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

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

提供字符串将始终具有此结构,最简单的方法是使用String.IndexOf()查找" String.Substring()的第一个出现的索引,然后为您提供原始字符串的适当部分。

同样,你可以使用String.LastIndexOf()找到第一的指数"从字符串的结尾 。然后你就可以提取第二个参数的值( "hi"你的样品中)。

你最终会得到这样的东西:

int begin = myString.IndexOf('"');
int end = myString.LastIndexOf('"');
string secondArg = myString.Substring(begin, end - begin + 1);

这将在secondArg产生"\\"hi\\""

更新 :要删除字符串的一部分,请使用String.Remove()方法:

int begin = myString.IndexOf('(');
int end = myString.IndexOf('"');
string altered = myString.Remove(begin + 1, end - begin - 1);

这将产生"SET(\\"hi\\", u)"中的altered

我假设你想改造

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", part,并留给我们u)

Trim是必要的仅仅是你之前删除前导空格字符u

最后,我们预先SET(到我们的子串(因为我们之前由于我们的Substring而删除了它)。

编辑 :根据您的评论 (与您在问题中提到的内容相矛盾) ,您可以使用:

String newString = "SET(" + myString.Substring(myString.IndexOf(',') + 1).Trim();

这非常糟糕,但这可以通过简单的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个字符,您可以改变它以跳过包含它们的数组中的字符。

我知道已经有好几年了,但是.Net 也同时发展了。 考虑使用范围运算符,以防有人在这里寻找答案。
假设Set(\"hi\", u)是常数值(没有转义的 8 位数字):

var sub = myString[^4...^8];
myString.Replace(sub, replaceValue);

本文或微软文档中的更多示例和很好的解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM