CompareInfo.LastIndexOf メソッド (String, String)
指定した部分文字列を検索し、検索対象文字列全体内で、その部分文字列が最後に出現する位置の 0 から始まるインデックス番号を返します。
Overloads Public Overridable Function LastIndexOf( _
ByVal source As String, _ ByVal value As String _) As Integer
[C#]
public virtual int LastIndexOf(stringsource,stringvalue);
[C++]
public: virtual int LastIndexOf(String* source,String* value);
[JScript]
public function LastIndexOf(
source : String,value : String) : int;
パラメータ
- source
検索対象の文字列。 - value
source 内で検索する文字列。
戻り値
source 全体内で value が見つかった場合は、最後に見つかった位置の 0 から始まるインデックス番号。それ以外の場合は -1。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | source が null 参照 (Visual Basic では Nothing) です。
または value が null 参照 (Nothing) です。 |
解説
検索範囲の文字列内で、検索はその文字列の末尾から開始して逆方向に進み、その文字列の先頭で終了します。
このオーバーロードは、カルチャを考慮した検索を実行します。カルチャによっては、合字の 'Æ' (U+00C6) など構成済み文字を表す Unicode 値と、この文字の構成要素が "AE" (U+0041、U+0045) のように正しい順序で出現したものが等価であると見なします。Unicode 値を比較する番号順 (カルチャを考慮しない) 検索を実行するには、 CompareOptions 値をパラメータとして受け取るオーバーロードのいずれかを使用して、 Ordinal 値を使用します。
使用例
[Visual Basic, C#, C++] 次に示すのは、文字列内の最初と最後に出現する文字または部分文字列のインデックスを調べるコード例です。
Imports System
Imports System.Globalization
Imports Microsoft.VisualBasic
Public Class SamplesCompareInfo
Public Shared Sub Main()
' Creates CompareInfo for the InvariantCulture.
Dim myComp As CompareInfo = CultureInfo.InvariantCulture.CompareInfo
' Searches for the ligature .
Dim myStr As [String] = "Is AE or ae the same as or ?"
Console.WriteLine()
Console.WriteLine("No options : {0}", myStr)
PrintMarker(" AE : ", myComp.IndexOf(myStr, "AE"), myComp.LastIndexOf(myStr, "AE"))
PrintMarker(" ae : ", myComp.IndexOf(myStr, "ae"), myComp.LastIndexOf(myStr, "ae"))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c), myComp.LastIndexOf(myStr, ""c))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c), myComp.LastIndexOf(myStr, ""c))
Console.WriteLine("Ordinal : {0}", myStr)
PrintMarker(" AE : ", myComp.IndexOf(myStr, "AE", CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "AE", CompareOptions.Ordinal))
PrintMarker(" ae : ", myComp.IndexOf(myStr, "ae", CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "ae", CompareOptions.Ordinal))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, ""c, CompareOptions.Ordinal))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, ""c, CompareOptions.Ordinal))
Console.WriteLine("IgnoreCase : {0}", myStr)
PrintMarker(" AE : ", myComp.IndexOf(myStr, "AE", CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "AE", CompareOptions.IgnoreCase))
PrintMarker(" ae : ", myComp.IndexOf(myStr, "ae", CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "ae", CompareOptions.IgnoreCase))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, ""c, CompareOptions.IgnoreCase))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, ""c, CompareOptions.IgnoreCase))
' Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis.
myStr = "Is " & ChrW(&H0055) & ChrW(&H0308) & " or " & ChrW(&H0075) & ChrW(&H0308) & " the same as " & ChrW(&H00DC) & " or " & ChrW(&H00FC) & "?"
Console.WriteLine()
Console.WriteLine("No options : {0}", myStr)
PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308)), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308)))
PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308)), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308)))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c), myComp.LastIndexOf(myStr, ""c))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c), myComp.LastIndexOf(myStr, ""c))
Console.WriteLine("Ordinal : {0}", myStr)
PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.Ordinal))
PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.Ordinal), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.Ordinal))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, ""c, CompareOptions.Ordinal))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.Ordinal), myComp.LastIndexOf(myStr, ""c, CompareOptions.Ordinal))
Console.WriteLine("IgnoreCase : {0}", myStr)
PrintMarker(" U" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "U" & ChrW(&H0308), CompareOptions.IgnoreCase))
PrintMarker(" u" & ChrW(&H0308) & " : ", myComp.IndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, "u" & ChrW(&H0308), CompareOptions.IgnoreCase))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, ""c, CompareOptions.IgnoreCase))
PrintMarker(" : ", myComp.IndexOf(myStr, ""c, CompareOptions.IgnoreCase), myComp.LastIndexOf(myStr, ""c, CompareOptions.IgnoreCase))
End Sub 'Main
Public Shared Sub PrintMarker(Prefix As [String], First As Integer, Last As Integer)
' Determines the size of the array to create.
Dim mySize As Integer
If Last > First Then
mySize = Last
Else
mySize = First
End If
If mySize > - 1 Then
' Creates an array of Char to hold the markers.
Dim myCharArr(mySize + 1) As [Char]
' Inserts the appropriate markers.
If First > - 1 Then
myCharArr(First) = "f"c
End If
If Last > - 1 Then
myCharArr(Last) = "l"c
End If
If First = Last Then
myCharArr(First) = "b"c
End If
' Displays the array of Char as a String.
Console.WriteLine("{0}{1}", Prefix, New [String](myCharArr))
Else
Console.WriteLine(Prefix)
End If
End Sub 'PrintMarker
End Class 'SamplesCompareInfo
'This code produces the following output.
'
'No options : Is AE or ae the same as or ?
' AE : f l
' ae : f l
' : f l
' : f l
'Ordinal : Is AE or ae the same as or ?
' AE : b
' ae : b
' : b
' : b
'IgnoreCase : Is AE or ae the same as or ?
' AE : f l
' ae : f l
' : f l
' : f l
'
'No options : Is U" or u" the same as or ?
' U" : f l
' u" : f l
' : f l
' : f l
'Ordinal : Is U" or u" the same as or ?
' U" : b
' u" : b
' : b
' : b
'IgnoreCase : Is U" or u" the same as or ?
' U" : f l
' u" : f l
' : f l
' : f l
[C#]
using System;
using System.Globalization;
public class SamplesCompareInfo {
public static void Main() {
// Creates CompareInfo for the InvariantCulture.
CompareInfo myComp = CultureInfo.InvariantCulture.CompareInfo;
// Searches for the ligature .
String myStr = "Is AE or ae the same as or ?";
Console.WriteLine();
Console.WriteLine( "No options : {0}", myStr );
PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE" ), myComp.LastIndexOf( myStr, "AE" ) );
PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae" ), myComp.LastIndexOf( myStr, "ae" ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '' ), myComp.LastIndexOf( myStr, '' ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '' ), myComp.LastIndexOf( myStr, '' ) );
Console.WriteLine( "Ordinal : {0}", myStr );
PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "AE", CompareOptions.Ordinal ) );
PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "ae", CompareOptions.Ordinal ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, '', CompareOptions.Ordinal ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, '', CompareOptions.Ordinal ) );
Console.WriteLine( "IgnoreCase : {0}", myStr );
PrintMarker( " AE : ", myComp.IndexOf( myStr, "AE", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "AE", CompareOptions.IgnoreCase ) );
PrintMarker( " ae : ", myComp.IndexOf( myStr, "ae", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "ae", CompareOptions.IgnoreCase ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, '', CompareOptions.IgnoreCase ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, '', 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?";
Console.WriteLine();
Console.WriteLine( "No options : {0}", myStr );
PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308" ), myComp.LastIndexOf( myStr, "U\u0308" ) );
PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308" ), myComp.LastIndexOf( myStr, "u\u0308" ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '' ), myComp.LastIndexOf( myStr, '' ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '' ), myComp.LastIndexOf( myStr, '' ) );
Console.WriteLine( "Ordinal : {0}", myStr );
PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "U\u0308", CompareOptions.Ordinal ) );
PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308", CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, "u\u0308", CompareOptions.Ordinal ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, '', CompareOptions.Ordinal ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.Ordinal ), myComp.LastIndexOf( myStr, '', CompareOptions.Ordinal ) );
Console.WriteLine( "IgnoreCase : {0}", myStr );
PrintMarker( " U\u0308 : ", myComp.IndexOf( myStr, "U\u0308", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "U\u0308", CompareOptions.IgnoreCase ) );
PrintMarker( " u\u0308 : ", myComp.IndexOf( myStr, "u\u0308", CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, "u\u0308", CompareOptions.IgnoreCase ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, '', CompareOptions.IgnoreCase ) );
PrintMarker( " : ", myComp.IndexOf( myStr, '', CompareOptions.IgnoreCase ), myComp.LastIndexOf( myStr, '', CompareOptions.IgnoreCase ) );
}
public static void PrintMarker( 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.
Console.WriteLine( "{0}{1}", Prefix, new String( myCharArr ) );
}
else
Console.WriteLine( Prefix );
}
}
/*
This code produces the following output.
No options : Is AE or ae the same as or ?
AE : f l
ae : f l
: f l
: f l
Ordinal : Is AE or ae the same as or ?
AE : b
ae : b
: b
: b
IgnoreCase : Is AE or ae the same as or ?
AE : f l
ae : f l
: f l
: f l
No options : Is U" or u" the same as or ?
U" : f l
u" : f l
: f l
: f l
Ordinal : Is U" or u" the same as or ?
U" : b
u" : b
: b
: b
IgnoreCase : Is U" or u" the same as or ?
U" : f l
u" : f l
: f l
: f l
*/
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Globalization;
void PrintMarker( 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.
Console::WriteLine( S"{0}{1}", Prefix, new String( myCharArr ) );
}
else
Console::WriteLine( Prefix );
}
int main() {
// Creates CompareInfo for the InvariantCulture.
CompareInfo* myComp = CultureInfo::InvariantCulture->CompareInfo;
// Searches for the ligature .
String* myStr = S"Is AE or ae the same as or ?";
Console::WriteLine();
Console::WriteLine( S"No options : {0}", myStr );
PrintMarker( S" AE : ", myComp->IndexOf( myStr, S"AE" ), myComp->LastIndexOf( myStr, S"AE" ) );
PrintMarker( S" ae : ", myComp->IndexOf( myStr, S"ae" ), myComp->LastIndexOf( myStr, S"ae" ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'' ), myComp->LastIndexOf( myStr, L'' ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'' ), myComp->LastIndexOf( myStr, L'' ) );
Console::WriteLine( S"Ordinal : {0}", myStr );
PrintMarker( S" AE : ", myComp->IndexOf( myStr, S"AE", CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, S"AE", CompareOptions::Ordinal ) );
PrintMarker( S" ae : ", myComp->IndexOf( myStr, S"ae", CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, S"ae", CompareOptions::Ordinal ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, L'', CompareOptions::Ordinal ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, L'', CompareOptions::Ordinal ) );
Console::WriteLine( S"IgnoreCase : {0}", myStr );
PrintMarker( S" AE : ", myComp->IndexOf( myStr, S"AE", CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, S"AE", CompareOptions::IgnoreCase ) );
PrintMarker( S" ae : ", myComp->IndexOf( myStr, S"ae", CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, S"ae", CompareOptions::IgnoreCase ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, L'', CompareOptions::IgnoreCase ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, L'', CompareOptions::IgnoreCase ) );
// Searches for the combining character sequence Latin capital letter U with diaeresis or Latin small letter u with diaeresis.
myStr = S"Is U\u0308 or u\u0308 the same as \u00DC or \u00FC?";
Console::WriteLine();
Console::WriteLine( S"No options : {0}", myStr );
PrintMarker( S" U\u0308 : ", myComp->IndexOf( myStr, S"U\u0308" ), myComp->LastIndexOf( myStr, S"U\u0308" ) );
PrintMarker( S" u\u0308 : ", myComp->IndexOf( myStr, S"u\u0308" ), myComp->LastIndexOf( myStr, S"u\u0308" ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'' ), myComp->LastIndexOf( myStr, L'' ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'' ), myComp->LastIndexOf( myStr, L'' ) );
Console::WriteLine( S"Ordinal : {0}", myStr );
PrintMarker( S" U\u0308 : ", myComp->IndexOf( myStr, S"U\u0308", CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, S"U\u0308", CompareOptions::Ordinal ) );
PrintMarker( S" u\u0308 : ", myComp->IndexOf( myStr, S"u\u0308", CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, S"u\u0308", CompareOptions::Ordinal ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, L'', CompareOptions::Ordinal ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::Ordinal ), myComp->LastIndexOf( myStr, L'', CompareOptions::Ordinal ) );
Console::WriteLine( S"IgnoreCase : {0}", myStr );
PrintMarker( S" U\u0308 : ", myComp->IndexOf( myStr, S"U\u0308", CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, S"U\u0308", CompareOptions::IgnoreCase ) );
PrintMarker( S" u\u0308 : ", myComp->IndexOf( myStr, S"u\u0308", CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, S"u\u0308", CompareOptions::IgnoreCase ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, L'', CompareOptions::IgnoreCase ) );
PrintMarker( S" : ", myComp->IndexOf( myStr, L'', CompareOptions::IgnoreCase ), myComp->LastIndexOf( myStr, L'', CompareOptions::IgnoreCase ) );
}
/*
This code produces the following output.
No options : Is AE or ae the same as or ?
AE : f l
ae : f l
: f l
: f l
Ordinal : Is AE or ae the same as or ?
AE : b
ae : b
: b
: b
IgnoreCase : Is AE or ae the same as or ?
AE : f l
ae : f l
: f l
: f l
No options : Is U" or u" the same as or ?
U" : f l
u" : f l
: f l
: f l
Ordinal : Is U" or u" the same as or ?
U" : b
u" : b
: b
: b
IgnoreCase : Is U" or u" the same as or ?
U" : f l
u" : f l
: f l
: f l
*/
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
CompareInfo クラス | CompareInfo メンバ | System.Globalization 名前空間 | CompareInfo.LastIndexOf オーバーロードの一覧 | IndexOf