c#中的子串IndexOf

Des*_*iya 8 c# substring

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

这是我到目前为止所做的:

if (name.Contains("_"))
{
name = name.Substring(0, name.LastIndexOf('_'));
}
Run Code Online (Sandbox Code Playgroud)

有了这个我至少删除了_02,但如果我尝试相同的方式^然后我总是回来texthere,即使我使用name.IndexOf("^")

我也尝试只检查^,至少得到结果:D123456_02但仍然是相同的结果.

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

texthere并不总是相同的长度,所以是不可能.Remove()的.

我究竟做错了什么?

谢谢

Dmi*_*nko 9

通话时Substring你不应该从0开始,而是从找到的索引开始:

  String name = "texthere^D123456_02";

  int indexTo = name.LastIndexOf('_');

  if (indexTo < 0)
    indexTo = name.Length;

  int indexFrom = name.LastIndexOf('^', indexTo - 1);

  if (indexFrom >= 0)
    name = name.Substring(indexFrom + 1, indexTo - indexFrom - 1);
Run Code Online (Sandbox Code Playgroud)


Gha*_*sen 6

string s = "texthere^D123456_02";
            string result= s.Substring(s.IndexOf("^") + 1);//Remove all before
            result = result.Remove(result.IndexOf("_"));//Remove all after
Run Code Online (Sandbox Code Playgroud)


kal*_*ies 5

使用String.Split方法:

    var split1 = name.Split('^')[1];
    var yourText = split1.Split('_')[0];
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 RegExp 来实现基本相同。