Does String.Contains and String.LastIndexOf C # return a different result?

I have this problem when String.Contains returns true and String.LastIndexOf returns -1. Can someone explain to me what happened? I am using .NET 4.5.

    static void Main(string[] args)
    {
        String wikiPageUrl = @"http://it.wikipedia.org/wiki/ʿAbd_Allāh_al-Sallāl";

        if (wikiPageUrl.Contains("wikipedia.org/wiki/"))
        {

            int i = wikiPageUrl.LastIndexOf("wikipedia.org/wiki/");

            Console.WriteLine(i);

        }
    }
+4
source share
4 answers

Try using StringComparison.Ordinal

This will compare string, evaluating the numerical values ​​of the corresponding charsin each string, this should work with the special charsone that you have in this examplestring

 string wikiPageUrl = @"http://it.wikipedia.org/wiki/ʿAbd_Allāh_al-Sallāl";
 int i = wikiPageUrl.LastIndexOf("http://it.wikipedia.org/wiki/", StringComparison.Ordinal);

// returns 0;

+3
source

@sa_ddam213 answer , , .

" ", . , , :

string url1 = @"http://it.wikipedia.org/wiki/»Abd_Allāh_al-Sallāl";
Console.WriteLine(url1.LastIndexOf("it.wikipedia.org/wiki/")); // 7

string url2 = @"http://it.wikipedia.org/wiki/~Abd_Allāh_al-Sallāl";
Console.WriteLine(url2.LastIndexOf("it.wikipedia.org/wiki/")); // 7

, , "'", 1. , , - "/". , .

LastIndexOf, StringComparison, , .

, "/" "" - , , LastIndexOf.

StringComparison.Ordinal LastIndexOf, , - .

- CompareInfo.LastIndexOf CompareOptions.IgnoreNonSpace:

Console.WriteLine(
    CultureInfo.CurrentCulture.CompareInfo.LastIndexOf(
        wikiPageUrl, @"it.wikipedia.org/wiki/", CompareOptions.IgnoreNonSpace));
// 7

, , .

, , @Partha answer @Noctis , , , LastIndexOf.

Contains, ( ). , Contains true LastIndexOf false.

, .NET, .


1: ? , - .

+5

, # lastindexof .

wikipedia.org/wiki/ ', escape-. ' wiki/, @.

()

string wikiPageUrl = @"http://it.wikipedia.org/wiki/Abd_Allāh_al-Sallāl";

string wikiPageUrl = @"http://it.wikipedia.org/wiki/@ʿAbd_Allāh_al-Sallāl";

int i = wikiPageUrl.LastIndexOf("wikipedia.org/wiki");

3

, ' @' - .

+2

characters 'drop it.

This should work when you exit 'like \':

wikiPageUrl = @"http://it.wikipedia.org/wiki/\'Abd_Allāh_al-Sallāl";

if (wikiPageUrl.Contains("wikipedia.org/wiki/"))
{
    "contains".Dump();
  int i = wikiPageUrl.LastIndexOf("wikipedia.org/wiki/");

  Console.WriteLine(i);

}

find out what you want to do (delete ', run away, or dig deeper :)).

0
source

All Articles