정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

CompareInfo.IndexOf 메서드 (String, Char, Int32, Int32)

2013-12-13

소스 문자열 중 지정된 인덱스에서 시작하고 지정된 수의 요소를 포함하는 영역에서 지정된 문자를 검색하고, 맨 처음 검색된 항목의 인덱스(0부터 시작)를 반환합니다.

Namespace:  System.Globalization
어셈블리:  mscorlib(mscorlib.dll)

public virtual int IndexOf(
	string source,
	char value,
	int startIndex,
	int count
)

매개 변수

source
형식: System.String
검색할 문자열입니다.
value
형식: System.Char
source에서 찾을 문자입니다.
startIndex
형식: System.Int32
검색의 0부터 시작하는 인덱스입니다.
count
형식: System.Int32
검색할 영역에 있는 요소 수입니다.

반환 값

형식: System.Int32
sourcestartIndex에서 시작하고 count로 지정된 수의 요소를 포함하는 영역에서 value를 찾은 경우 맨 처음 검색된 항목의 인덱스(0부터 시작)이고, 그렇지 않으면 -1입니다.

예외조건
ArgumentNullException

sourcenull인 경우

ArgumentOutOfRangeException

startIndexsource에 대한 올바른 인덱스 범위를 벗어나는 경우

-또는-

count가 0보다 작은 경우

-또는-

startIndexcountsource에서 올바른 섹션을 지정하지 않은 경우

소스 문자열에 대한 검색은 startIndex에서 시작하여 startIndex + count - 1에서 끝납니다.

이 오버로드는 문화권 구분 검색을 수행합니다. 문자가 합자 "Æ"(U+00C6)와 같은 미리 구성된 문자를 나타내는 유니코드 값인 경우에는 문화권에 따라 "AE"(U+0041, U+0045)와 같이 해당 구성 요소가 올바른 순서로 나오는 경우와 같은 것으로 처리될 수 있습니다. 문화권을 구분하지 않는, 즉 유니코드 값이 같은 경우에만 문자를 다른 문자와 동일한 것으로 간주하는 서수 검색을 수행하려면 응용프로그램에서 CompareOptions 값을 매개 변수로 받는 오버로드 중 하나를 사용하고 Ordinal 값을 사용해야 합니다.

다음 예제에서는 문자열의 일부 내에서 첫 번째와 마지막으로 일치하는 문자 또는 부분 문자열의 인덱스를 확인합니다.


using System;
using System.Globalization;

public class Example
{

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {

      // Creates CompareInfo for the InvariantCulture.
      CompareInfo myComp = CultureInfo.InvariantCulture.CompareInfo;

      // iS is the starting index of the substring.
      int iS = 8;
      // iL is the length of the substring.
      int iL = 18;
      // myT1 and myT2 are the strings used for padding.
      String myT1 = new String('-', iS);
      String myT2;

      // Searches for the ligature Æ.
      String myStr = "Is AE or ae the same as Æ or æ?";
      myT2 = new String('-', myStr.Length - iS - iL);
      outputBlock.Text += "\n";
      outputBlock.Text += String.Format("Original      : {0}", myStr) + "\n";
      outputBlock.Text += String.Format("No options    : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           AE : ", myComp.IndexOf(myStr, "AE", iS, iL), myComp.LastIndexOf(myStr, "AE", iS + iL - 1, iL));
      PrintMarker(outputBlock, "           ae : ", myComp.IndexOf(myStr, "ae", iS, iL), myComp.LastIndexOf(myStr, "ae", iS + iL - 1, iL));
      PrintMarker(outputBlock, "            Æ : ", myComp.IndexOf(myStr, 'Æ', iS, iL), myComp.LastIndexOf(myStr, 'Æ', iS + iL - 1, iL));
      PrintMarker(outputBlock, "            æ : ", myComp.IndexOf(myStr, 'æ', iS, iL), myComp.LastIndexOf(myStr, 'æ', iS + iL - 1, iL));
      outputBlock.Text += String.Format("Ordinal       : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           AE : ", myComp.IndexOf(myStr, "AE", iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "AE", iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "           ae : ", myComp.IndexOf(myStr, "ae", iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "ae", iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "            Æ : ", myComp.IndexOf(myStr, 'Æ', iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, 'Æ', iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "            æ : ", myComp.IndexOf(myStr, 'æ', iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, 'æ', iS + iL - 1, iL, CompareOptions.Ordinal));
      outputBlock.Text += String.Format("IgnoreCase    : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           AE : ", myComp.IndexOf(myStr, "AE", iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "AE", iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "           ae : ", myComp.IndexOf(myStr, "ae", iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "ae", iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "            Æ : ", myComp.IndexOf(myStr, 'Æ', iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, 'Æ', iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "            æ : ", myComp.IndexOf(myStr, 'æ', iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, 'æ', iS + iL - 1, iL, CompareOptions.IgnoreCase));

      // Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis.
      myStr = "Is \u0055\u0308 or \u0075\u0308 the same as \u00DC or \u00FC?";
      myT2 = new String('-', myStr.Length - iS - iL);
      outputBlock.Text += "\n";
      outputBlock.Text += String.Format("Original      : {0}", myStr) + "\n";
      outputBlock.Text += String.Format("No options    : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           U\u0308 : ", myComp.IndexOf(myStr, "U\u0308", iS, iL), myComp.LastIndexOf(myStr, "U\u0308", iS + iL - 1, iL));
      PrintMarker(outputBlock, "           u\u0308 : ", myComp.IndexOf(myStr, "u\u0308", iS, iL), myComp.LastIndexOf(myStr, "u\u0308", iS + iL - 1, iL));
      PrintMarker(outputBlock, "            Ü : ", myComp.IndexOf(myStr, 'Ü', iS, iL), myComp.LastIndexOf(myStr, 'Ü', iS + iL - 1, iL));
      PrintMarker(outputBlock, "            ü : ", myComp.IndexOf(myStr, 'ü', iS, iL), myComp.LastIndexOf(myStr, 'ü', iS + iL - 1, iL));
      outputBlock.Text += String.Format("Ordinal       : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           U\u0308 : ", myComp.IndexOf(myStr, "U\u0308", iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "U\u0308", iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "           u\u0308 : ", myComp.IndexOf(myStr, "u\u0308", iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "u\u0308", iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "            Ü : ", myComp.IndexOf(myStr, 'Ü', iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, 'Ü', iS + iL - 1, iL, CompareOptions.Ordinal));
      PrintMarker(outputBlock, "            ü : ", myComp.IndexOf(myStr, 'ü', iS, iL, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, 'ü', iS + iL - 1, iL, CompareOptions.Ordinal));
      outputBlock.Text += String.Format("IgnoreCase    : {0}{1}{2}", myT1, myStr.Substring(iS, iL), myT2) + "\n";
      PrintMarker(outputBlock, "           U\u0308 : ", myComp.IndexOf(myStr, "U\u0308", iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "U\u0308", iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "           u\u0308 : ", myComp.IndexOf(myStr, "u\u0308", iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "u\u0308", iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "            Ü : ", myComp.IndexOf(myStr, 'Ü', iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, 'Ü', iS + iL - 1, iL, CompareOptions.IgnoreCase));
      PrintMarker(outputBlock, "            ü : ", myComp.IndexOf(myStr, 'ü', iS, iL, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, 'ü', iS + iL - 1, iL, CompareOptions.IgnoreCase));

   }

   public static void PrintMarker(System.Windows.Controls.TextBlock outputBlock, String Prefix, int First, int Last)
   {

      // Determines the size of the array to create.
      int mySize;
      if (Last > First)
         mySize = Last;
      else
         mySize = First;

      if (mySize > -1)
      {

         // Creates an array of Char to hold the markers.
         Char[] myCharArr = new Char[mySize + 1];

         // Inserts the appropriate markers.
         if (First > -1)
            myCharArr[First] = 'f';
         if (Last > -1)
            myCharArr[Last] = 'l';
         if (First == Last)
            myCharArr[First] = 'b';

         // Displays the array of Char as a String.
         outputBlock.Text += String.Format("{0}{1}", Prefix, new String(myCharArr)) + "\n";

      }
      else
         outputBlock.Text += Prefix + "\n";

   }

}


/*
This code produces the following output.

Original      : Is AE or ae the same as Æ or æ?
No options    : -------- ae the same as Æ -----
           AE :                         b
           ae :          b
            Æ :                         b
            æ :          b
Ordinal       : -------- ae the same as Æ -----
           AE :
           ae :          b
            Æ :                         b
            æ :
IgnoreCase    : -------- ae the same as Æ -----
           AE :          f              l
           ae :          f              l
            Æ :          f              l
            æ :          f              l

Original      : Is U" or u" the same as Ü or ü?
No options    : -------- u" the same as Ü -----
           U" :                         b
           u" :          b
            Ü :                         b
            ü :          b
Ordinal       : -------- u" the same as Ü -----
           U" :
           u" :          b
            Ü :                         b
            ü :
IgnoreCase    : -------- u" the same as Ü -----
           U" :          f              l
           u" :          f              l
            Ü :          f              l
            ü :          f              l

*/


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

표시: