C#中的子字符串IndexOf

11

我有一个字符串,看起来像这样:"texthere^D123456_02"。但我想要的结果是D123456

目前我已经做了这些:

if (name.Contains("_"))
{
name = name.Substring(0, name.LastIndexOf('_'));
}

通过这种方式,我至少移除了_02,但是如果我尝试同样的方法对^进行操作,那么无论我是否使用name.IndexOf("^")都会得到texthere

我还尝试仅检查^,以至少获得结果:D123456_02,但结果仍然相同。

我甚至尝试过name.Replace("^",然后再使用之前使用的子字符串方式。但是结果仍然保持不变。

texthere的长度并不总是相同,因此.Remove()不可行。

我做错了什么?

谢谢







































3
你可以以 ^ 字符为分隔符,只取第二部分。但我认为更好的选择是使用正则表达式。 - Matthijs
13个回答

3

好的,如果你使用你所发布的相同代码,它正在做正确的事情。你开始从字符0中检索字符,并在找到“^”时停止,所以你得到的是“texthere”。

如果你只想要值,那么请使用以下代码:

name = name.Substring(0, name.LastIndexOf('_')).Substring(name.IndexOf("^") + 1);

它将首先删除下划线后面的所有内容以及插入符号前面的所有内容。


2
String name = "texthere^D123456_02"
    print name.split('_', '^')[1]

这个函数可以将字符串根据所有的 _ 和 ^ 分割,并返回分割后的字符串列表。因为你需要的字符串 D123456 在第一个索引位置(即第二个位置),所以我已经打印出了它。

2
如果您只需要 "d123456",那么使用 String.Split() 就足够了,不需要其他任何东西。只需在定义后指定所需的索引即可。为此,Split() 有多个重载函数。
//...

var source = "texthere^D123456_02";
var result = source.Split(new char[] {'^', '_'}, StringSplitOptions.RemoveEmptyEntries)[1];
Console.WriteLine(result);
//Outputs: "D123456"

希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接