Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Substring IndexOf in c#

I have a string that looks like this: "texthere^D123456_02". But I want my result to be D123456.

this is what i do so far:

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

With this I remove at least the _02, however if I try the same way for ^ then I always get back texthere, even when I use name.IndexOf("^")

I also tried only to check for ^, to get at least the result:D123456_02 but still the same result.

I even tried to name.Replace("^" and then use the substring way I used before. But again the result stays the same.

texthere is not always the same length, so .Remove() is out of the question.

What am I doing wrong?

Thanks

like image 371
Desutoroiya Avatar asked Mar 04 '16 08:03

Desutoroiya


1 Answers

When call Substring you should not start from 0, but from the index found:

  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);
like image 176
Dmitry Bychenko Avatar answered Oct 12 '22 02:10

Dmitry Bychenko