String コンストラクター
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
String クラスの新しいインスタンスを初期化します。
オーバーロード
String(Char*) |
String クラスの新しいインスタンスを初期化し、指定した Unicode 文字配列を指すポインターにより示される値に設定します。 |
String(Char[]) |
String クラスの新しいインスタンスを、指定した文字配列で示された Unicode 文字に初期化します。 |
String(ReadOnlySpan<Char>) |
String クラスの新しいインスタンスを、指定した読み取り専用スパンで示された Unicode 文字に初期化します。 |
String(SByte*) |
String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指すポインターにより示される値に設定します。 |
String(Char, Int32) |
String クラスの新しいインスタンスを初期化し、指定した回数だけ繰り返した指定の Unicode 文字が示す値に設定します。 |
String(Char*, Int32, Int32) |
String クラスの新しいインスタンスを初期化し、Unicode 文字の配列を指す指定のポインター、配列内の開始文字位置、および長さにより示される値に設定します。 |
String(Char[], Int32, Int32) |
String クラスの新しいインスタンスを初期化し、Unicode 文字の配列、配列内の開始文字位置、および長さにより示される値に設定します。 |
String(SByte*, Int32, Int32) |
String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指す指定のポインター、配列内の開始位置、および長さにより示される値に設定します。 |
String(SByte*, Int32, Int32, Encoding) |
String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指す指定のポインター、配列内の開始位置、長さ、および Encoding オブジェクトにより示される値に設定します。 |
注釈
このセクションの内容:
オーバーロードされたコンストラクターの構文
パラメータ
例外
どの方法を呼び出すか。
作成 (文字列を)
反復する文字列の処理
文字列のインスタンス化の例を次に示します。
文字列の割り当てを使用する
文字配列を使用する
文字配列の一部を使用し、1つの文字を繰り返す
文字配列へのポインターを使用する
ポインターと配列の範囲を使用する
符号付きバイト配列へのポインターを使用する
オーバーロードされたコンストラクターの構文
文字列コンストラクターは、ポインターパラメーターを持たない2つのカテゴリと、ポインターパラメーターを持つ2つのカテゴリに分類されます。 ポインターを使用するコンストラクターは CLS に準拠していません。 さらに、Visual Basic はポインターの使用をサポートしていません。また、C# では、ポインターを使用して unsafe コンテキストで実行するコードが必要です。 詳しくは、「unsafe」をご覧ください。
オーバーロードの選択に関するその他のガイダンスについては、「 どのメソッドを呼び出すのですか?」を参照してください。
String(Char[] value)
Unicode 文字の配列によって示される値に新しいインスタンスを初期化します。 このコンストラクターは、Unicode 文字 (例) をコピーします。
String(Char[] value, Int32 startIndex, Int32 length)
新しいインスタンスを、Unicode 文字の配列、配列内の開始文字位置、および長さ (例) で示される値に初期化します。
String(Char c, Int32 count)
指定した回数 (例) を繰り返して、指定した Unicode 文字で示される値に新しいインスタンスを初期化します。
String(char* value)
(CLS に準拠していません) Null 文字 (U + 0000 または ' \ 0 ') で終わる Unicode 文字の配列を指すポインターによって示される値に新しいインスタンスを初期化します。 (例)。
アクセス許可: SecurityCriticalAttribute 、は、直前の呼び出し元に対して完全な信頼を必要とします。 このメンバーは、部分的に信頼されているコードまたは透過的なコードでは使用できません。
String(char* value, Int32 startIndex, Int32 length)
(CLS に準拠していません) Unicode 文字の配列へのポインター、配列内の開始文字位置、および長さによって示される値に、新しいインスタンスを初期化します。 コンストラクターは、 value
インデックスから開始 startIndex
してインデックス-1 で終了する Unicode 文字をコピーし startIndex
+ length
ます (例:)。
アクセス許可: SecurityCriticalAttribute 、は、直前の呼び出し元に対して完全な信頼を必要とします。 このメンバーは、部分的に信頼されているコードまたは透過的なコードでは使用できません。
String(SByte* value)
(CLS に準拠していません) 新しいインスタンスを、8ビット符号付き整数の配列へのポインターによって示される値に初期化します。 配列は、現在のシステムコードページ (で指定されたエンコーディング) を使用してエンコードされた文字列を表すと見なされ Encoding.Default ます。 コンストラクターは、 value
null 文字 (0x00) に到達するまでポインターによって指定された位置から文字を処理します (例)。
アクセス許可: SecurityCriticalAttribute 、は、直前の呼び出し元に対して完全な信頼を必要とします。 このメンバーは、部分的に信頼されているコードまたは透過的なコードでは使用できません。
String(SByte* value, Int32 startIndex, Int32 length)
(CLS に準拠していません) 新しいインスタンスを、8ビット符号付き整数の配列へのポインター、配列内の開始位置、および長さによって示される値に初期化します。 配列は、現在のシステムコードページ (で指定されたエンコーディング) を使用してエンコードされた文字列を表すと見なされ Encoding.Default ます。 コンストラクターは、から始まる値の文字を処理し、 startIndex
startIndex
+ length
-1 (例) で終わります。
アクセス許可: SecurityCriticalAttribute 、は、直前の呼び出し元に対して完全な信頼を必要とします。 このメンバーは、部分的に信頼されているコードまたは透過的なコードでは使用できません。
String(SByte* value, Int32 startIndex, Int32 length, Encoding enc)
(CLS に準拠していません) 新しいインスタンスを、8ビット符号付き整数の配列へのポインター、配列内の開始位置、長さ、およびオブジェクトによって示される値に初期化し Encoding ます。
アクセス許可: SecurityCriticalAttribute 、は、直前の呼び出し元に対して完全な信頼を必要とします。 このメンバーは、部分的に信頼されているコードまたは透過的なコードでは使用できません。
パラメーター
ポインターパラメーターを含まないコンストラクターによって使用されるパラメーターの完全な一覧を次に示し String ます。 各オーバーロードによって使用されるパラメーターについては、上記のオーバーロード構文を参照してください。
パラメーター | Type | 説明 |
---|---|---|
value |
Char[] | Unicode 文字の配列。 |
c |
Char | Unicode 文字。 |
startIndex |
Int32 | value 新しい文字列の最初の文字の開始位置。既定値: 0 |
length |
Int32 | value 新しい文字列に含めるの文字数。既定値:Array.Length |
count |
Int32 | c 新しい文字列で文字が繰り返される回数。 count が0の場合、新しいオブジェクトの値はに String.Empty なります。 |
ポインターパラメーターを含むコンストラクターによって使用されるパラメーターの完全な一覧を次に示し String ます。 各オーバーロードによって使用されるパラメーターについては、上記のオーバーロード構文を参照してください。
パラメーター | Type | 説明 |
---|---|---|
value |
Char* または SByte* |
Null で終わる Unicode 文字配列または8ビット符号付き整数の配列へのポインター。 value が null または空の配列の場合、新しい文字列の値はに String.Empty なります。 |
startIndex |
Int32 | 新しい文字列の最初の文字を定義する配列要素のインデックス。 既定値: 0 |
length |
Int32 | 新しい文字列を作成するために使用する配列要素の数。 Length が0の場合、コンストラクターは値がである文字列を作成し String.Empty ます。 既定値:Array.Length |
enc |
Encoding | 配列のエンコード方法を指定するオブジェクト value 。既定値: Encoding.Default 、またはシステムの現在の ANSI コードページ |
例外
ポインターパラメーターを含まないコンストラクターによってスローされる例外の一覧を次に示します。
例外 | 条件 | スロー者 |
---|---|---|
ArgumentNullException | value が null です。 |
String(Char[], Int32, Int32) |
ArgumentOutOfRangeException | startIndex 、 length 、または count が0未満です。または startIndex と length の合計が、value にある要素の数を超えています。または count が 0 未満です。 |
String(Char, Int32) String(Char[], Int32, Int32) |
ポインターパラメーターを含むコンストラクターによってスローされる例外の一覧を次に示します。
例外 | 条件 | スロー者 |
---|---|---|
ArgumentException | value 無効な Unicode 文字を含む配列を指定します。または value または value + startIndex は、64K 未満のアドレスを指定します。または 既定のコード ページ エンコードを使用しないので、新しいインスタンスをバイト配列 String value value から初期化できませんでした。 |
ポインターを持つすべてのコンストラクター。 |
ArgumentNullException | value が null です。 |
String(SByte*) String(SByte*, Int32, Int32) String(SByte*, Int32, Int32, Encoding) |
ArgumentOutOfRangeException | 現在のプロセスは、アドレス指定されたすべての文字に対する読み取りアクセス権を持っているわけではありません。 または startIndex または length が 0 未満であるか、value + startIndex によりポインターのオーバーフローが発生するか、または現在のプロセスにはすべてのアドレス指定された文字に対する読み取りアクセス許可がありません。または 新しい文字列の長さが大きすぎて割り当てきれなすぎます。 |
ポインターを持つすべてのコンストラクター。 |
AccessViolationException | value 、または value + startIndex + length - 1 は、無効なアドレスを指定します。 |
String(SByte*) String(SByte*, Int32, Int32) String(SByte*, Int32, Int32, Encoding) |
どのメソッドを呼び出しますか?
終了 | 呼び出しまたは使用 |
---|---|
文字列を作成します。 | 文字列リテラルまたは既存の文字列からの代入 (例) |
文字配列全体から文字列を作成します。 | String(Char[]) (例) |
文字配列の一部から文字列を作成します。 | String(Char[], Int32, Int32) (例) |
同じ文字を複数回繰り返す文字列を作成します。 | String(Char, Int32) (例) |
Unicode またはワイド文字配列へのポインターから文字列を作成します。 | String(Char*) |
ポインターを使用して、Unicode またはワイド文字配列の一部から文字列を作成します。 | String(Char*, Int32, Int32) |
C++ 配列から文字列を作成 char します。 |
String(SByte*), String(SByte*, Int32, Int32) または String(SByte*, Int32, Int32, Encoding) |
ASCII 文字から文字列を作成します。 | ASCIIEncoding.GetString |
文字列を作成する
プログラムで文字列を作成するために最も一般的に使用される手法は、この例に示す単純な代入 です。 クラス String には、次の値から文字列を作成できる 4 種類のコンストラクター オーバーロードも含まれています。
文字配列 (UTF-16 でエンコードされた文字の配列) から。 配列全体または配列 String の一部の文字から新しい オブジェクトを作成できます。 コンストラクター String(Char[]) は、配列内のすべての文字を新しい文字列にコピーします。 コンストラクター String(Char[], Int32, Int32) は、index から index - 1 の文字を
startIndex
startIndex
+length
新しい文字列にコピーします。 がlength
0 の場合、新しい文字列の値は です String.Empty 。同じ値を持つ文字列をコードで繰り返しインスタンス化する場合は、文字列を作成する別の方法を使用して、アプリケーションのパフォーマンスを向上させることができます。 詳細については、「反復文字列の 処理」を参照してください。
コンストラクターを使用して、0 回、1 回、または複数回重複する 1 文字 String(Char, Int32) から。 が
count
0 の場合、新しい文字列の値は です String.Empty 。コンストラクターまたは コンストラクターを使用して、null 終端文字配列へのポインター String(Char*) String(Char*, Int32, Int32) から。 配列全体または指定した範囲を使用して、文字列を初期化できます。 コンストラクターは、指定したポインターまたは指定したポインターから始まる Unicode 文字のシーケンスをコピーし、配列の末尾または文字に
startIndex
続length
けてコピーします。 がvalue
null ポインターの場合、またはlength
がゼロの場合、コンストラクターは 値が の文字列を作成します String.Empty 。 コピー操作が配列の末尾に進み、配列が null 終端ではない場合、コンストラクターの動作はシステムに依存します。 このような状態が原因でアクセス違反が発生する可能性があります。配列に null 文字 (U+0000 または '\0') が埋め込まれている場合、オーバーロードが呼び出された場合、文字列インスタンスには、埋め込み null を含む文字が含まれます。 String(Char*, Int32, Int32)
length
次の例は、2 つの null 文字を含む 10 要素の配列へのポインターが メソッドに渡された場合の処理を示 String(Char*, Int32, Int32) しています。 アドレスは配列の先頭であり、配列内のすべての要素を文字列に追加するために、コンストラクターは 2 つの埋め込み null を含む 10 文字の文字列をインスタンス化します。 一方、同じ配列がコンストラクターに渡された場合、結果は最初の null 文字を含む 4 String(Char*) 文字の文字列になります。using namespace System; void main() { wchar_t chars[] = { L'a', L'b', L'c', L'd', L'\0', L'A', L'B', L'C', L'D', L'\0' }; Char* chPtr = chars; String^ s = gcnew String(chPtr, 0, sizeof(chars) / sizeof (wchar_t)); for each (Char ch in s) Console::Write("{0:X4} ", Convert::ToUInt16(ch)); Console::WriteLine(); s = gcnew String(chPtr); for each (Char ch in s) Console::Write("{0:X4} ", Convert::ToUInt16(ch)); Console::WriteLine(); } // The example displays the following output: // 0061 0062 0063 0064 0000 0041 0042 0043 0044 0000 // 0061 0062 0063 0064
using System; public class Example { public unsafe static void Main() { char[] chars = { 'a', 'b', 'c', 'd', '\0', 'A', 'B', 'C', 'D', '\0' }; string s = null; fixed(char* chPtr = chars) { s = new string(chPtr, 0, chars.Length); } foreach (var ch in s) Console.Write($"{(ushort)ch:X4} "); Console.WriteLine(); fixed(char* chPtr = chars) { s = new string(chPtr); } foreach (var ch in s) Console.Write($"{(ushort)ch:X4} "); Console.WriteLine(); } } // The example displays the following output: // 0061 0062 0063 0064 0000 0041 0042 0043 0044 0000 // 0061 0062 0063 0064
配列には Unicode 文字を含む必要があります。 C++ では、文字配列はマネージド型 [] 型またはアンマネージド型 [] 型として定義 Char
wchar_t
する必要があることを意味します。オーバーロードが呼び出され、配列が null 終端ではない場合、またはオーバーロードが呼び出され String(Char*) String(Char*, Int32, Int32)
startIndex
+length
、-1 に文字シーケンスに割り当てられたメモリの外部にある範囲が含まれる場合、コンストラクターの動作はシステムに依存し、アクセス違反が発生する可能性があります。符号付きバイト配列へのポインターから。 配列全体または指定した範囲を使用して、文字列を初期化できます。 バイト シーケンスは、既定のコード ページ エンコードを使用して解釈するか、コンストラクター呼び出しでエンコードを指定できます。 コンストラクターが null 終端ではない配列全体から文字列をインスタンス化しようとする場合、または から
value
+startIndex
value
+startIndex
+length
-1 の配列の範囲が配列に割り当てられたメモリの外部にある場合、このコンストラクターの動作はシステムに依存し、アクセス違反が発生する可能性があります。符号付きバイト配列をパラメーターとして含む 3 つのコンストラクターは、次の例に示すように、主に C++ 配列を文字列に
char
変換するように設計されています。using namespace System; void main() { char chars[] = { 'a', 'b', 'c', 'd', '\x00' }; char* charPtr = chars; String^ value = gcnew String(charPtr); Console::WriteLine(value); } // The example displays the following output: // abcd
配列に null 文字 ('\0') または値が 0 でオーバーロードが呼び出されたバイトが含まれている場合、文字列インスタンスには、埋め込み null を含む文字が含 String(SByte*, Int32, Int32) まれます。
length
次の例は、2 つの null 文字を含む 10 要素の配列へのポインターが メソッドに渡された場合の処理を示 String(SByte*, Int32, Int32) しています。 アドレスは配列の先頭であり、配列内のすべての要素を文字列に追加するために、コンストラクターは 2 つの埋め込み null を含む 10 文字の文字列をインスタンス化します。 一方、同じ配列がコンストラクターに渡された場合、結果は最初の null 文字を含む 4 String(SByte*) 文字の文字列になります。using namespace System; void main() { char bytes[] = { 0x61, 0x62, 0x063, 0x064, 0x00, 0x41, 0x42,0x43, 0x44, 0x00 }; char* bytePtr = bytes; String^ s = gcnew String(bytePtr, 0, sizeof(bytes) / sizeof (char)); for each (Char ch in s) Console::Write("{0:X4} ", Convert::ToUInt16(ch)); Console::WriteLine(); s = gcnew String(bytePtr); for each (Char ch in s) Console::Write("{0:X4} ", Convert::ToUInt16(ch)); Console::WriteLine(); } // The example displays the following output: // 0061 0062 0063 0064 0000 0041 0042 0043 0044 0000 // 0061 0062 0063 0064
using System; public class Example { public unsafe static void Main() { sbyte[] bytes = { 0x61, 0x62, 0x063, 0x064, 0x00, 0x41, 0x42, 0x43, 0x44, 0x00 }; string s = null; fixed (sbyte* bytePtr = bytes) { s = new string(bytePtr, 0, bytes.Length); } foreach (var ch in s) Console.Write($"{(ushort)ch:X4} "); Console.WriteLine(); fixed(sbyte* bytePtr = bytes) { s = new string(bytePtr); } foreach (var ch in s) Console.Write($"{(ushort)ch:X4} "); Console.WriteLine(); } } // The example displays the following output: // 0061 0062 0063 0064 0000 0041 0042 0043 0044 0000 // 0061 0062 0063 0064
コンストラクターと コンストラクターは既定の ANSI コード ページを使用して解釈します。つまり、同じバイト配列を持つこれらのコンストラクターを呼び出すことによって、異なるシステムで異なる値を持つ文字列が String(SByte*) String(SByte*, Int32, Int32) 作成される
value
場合があります。
反復文字列を処理する
テキストのストリームを解析またはデコードするアプリでは、多くの場合、 コンストラクターまたは メソッドを使用して、文字のシーケンスを String(Char[], Int32, Int32) StringBuilder.Append(Char[], Int32, Int32) 文字列に変換します。 1 つの文字列を作成して再利用するのではなく、同じ値を持つ新しい文字列を繰り返し作成すると、メモリが無駄になります。 コンストラクターを呼び出して同じ文字列値を繰り返し作成する可能性が高い場合、同じ文字列値が何になるか事前にわからなかった場合でも、代わりにルックアップ テーブルを String(Char[], Int32, Int32) 使用できます。
たとえば、XML タグと属性を含むファイルから文字ストリームを読み取って解析するとします。 ストリームを解析すると、特定のトークン (つまり、シンボリックな意味を持つ文字のシーケンス) が繰り返し発生します。 文字列 "0"、"1"、"true"、および "false" に相当するトークンは、XML ストリームで頻繁に発生する可能性があります。
各トークンを新しい文字列に変換する代わりに、一般的に発生する文字列を保持する オブジェクト System.Xml.NameTable を作成できます。 オブジェクト NameTable は、一時メモリを割り当てずに格納された文字列を取得するために、パフォーマンスを向上させます。 トークンが検出された場合は、 メソッド NameTable.Get(Char[], Int32, Int32) を使用してテーブルからトークンを取得します。 トークンが存在する場合、メソッドは対応する文字列を返します。 トークンが存在しない場合は、 メソッドを使用してトークンをテーブルに挿入し、対応 NameTable.Add(Char[], Int32, Int32) する文字列を取得します。
例 1: 文字列の割り当てを使用する
次の例では、文字列リテラルを割り当て、新しい文字列を作成します。 最初の文字列の値を割り当て、2 番目の文字列を作成します。 これらは、新しい オブジェクトをインスタンス化する最も一般的な 2 つの方法 String です。
using namespace System;
void main()
{
String^ value1 = L"This is a string.";
String^ value2 = value1;
Console::WriteLine(value1);
Console::WriteLine(value2);
}
// The example displays the following output:
// This is a string.
// This is a string.
using System;
public class Example
{
public static void Main()
{
String value1 = "This is a string.";
String value2 = value1;
Console.WriteLine(value1);
Console.WriteLine(value2);
}
}
// The example displays the following output:
// This is a string.
// This is a string.
Module Example
Public Sub Main()
Dim value1 As String = "This is a string."
Dim value2 As String = value1
Console.WriteLine(value1)
Console.WriteLine(value2)
End Sub
End Module
' The example displays the following output:
' This is a string.
' This is a string.
例 2: 文字配列を使用する
次の例は、文字配列から新しい オブジェクトを String 作成する方法を示しています。
// Unicode Mathematical operators
wchar_t charArray1[4] = {L'\x2200',L'\x2202',L'\x200F',L'\x2205'};
wchar_t * lptstr1 = &charArray1[ 0 ];
String^ wszMathSymbols = gcnew String( lptstr1 );
// Unicode Letterlike Symbols
wchar_t charArray2[4] = {L'\x2111',L'\x2118',L'\x2122',L'\x2126'};
wchar_t * lptstr2 = &charArray2[ 0 ];
String^ wszLetterLike = gcnew String( lptstr2 );
// Compare Strings - the result is false
Console::WriteLine( String::Concat( L"The Strings are equal? ", (0 == String::Compare( wszLetterLike, wszMathSymbols ) ? (String^)"TRUE" : "FALSE") ) );
// Unicode Mathematical operators
char [] charArr1 = {'\u2200','\u2202','\u200F','\u2205'};
String szMathSymbols = new String(charArr1);
// Unicode Letterlike Symbols
char [] charArr2 = {'\u2111','\u2118','\u2122','\u2126'};
String szLetterLike = new String (charArr2);
// Compare Strings - the result is false
Console.WriteLine("The Strings are equal? " +
(String.Compare(szMathSymbols, szLetterLike)==0?"true":"false") );
' Unicode Mathematical operators
Dim charArr1() As Char = {ChrW(&H2200), ChrW(&H2202), _
ChrW(&H200F), ChrW(&H2205)}
Dim szMathSymbols As New String(charArr1)
' Unicode Letterlike Symbols
Dim charArr2() As Char = {ChrW(&H2111), ChrW(&H2118), _
ChrW(&H2122), ChrW(&H2126)}
Dim szLetterLike As New String(charArr2)
' Compare Strings - the result is false
Console.WriteLine("The strings are equal? " & _
CStr(szMathSymbols.Equals(szLetterLike)))
例 3: 文字配列の一部を使用し、1 つの文字を繰り返す
次の例では、文字配列の一部から新しいオブジェクトを作成する方法と、1 つの文字が複数回出現する新しい オブジェクトを作成する方法 String String を示します。
// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0391',5 );
// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega->Clone() );
// Examine the result
Console::WriteLine( szGreekLetters );
// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0391' );
// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat( "The Greek letter Alpha first appears at index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat( " and Omega last appears at index ", Convert::ToString( iomega ), " in this String." ) );
// Create a Unicode String with 5 Greek Alpha characters
String szGreekAlpha = new String('\u0391',5);
// Create a Unicode String with a Greek Omega character
String szGreekOmega = new String(new char [] {'\u03A9','\u03A9','\u03A9'},2,1);
String szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone());
// Examine the result
Console.WriteLine(szGreekLetters);
// The first index of Alpha
int ialpha = szGreekLetters.IndexOf('\u0391');
// The last index of Omega
int iomega = szGreekLetters.LastIndexOf('\u03A9');
Console.WriteLine("The Greek letter Alpha first appears at index " + ialpha +
" and Omega last appears at index " + iomega + " in this String.");
' Create a Unicode String with 5 Greek Alpha characters
Dim szGreekAlpha As New String(ChrW(&H0391), 5)
' Create a Unicode String with a Greek Omega character
Dim szGreekOmega As New String(New Char() {ChrW(&H03A9), ChrW(&H03A9), _
ChrW(&H03A9)}, 2, 1)
Dim szGreekLetters As String = String.Concat(szGreekOmega, szGreekAlpha, _
szGreekOmega.Clone())
' Examine the result
Console.WriteLine(szGreekLetters)
' The first index of Alpha
Dim iAlpha As Integer = szGreekLetters.IndexOf(ChrW(&H0391))
' The last index of Omega
Dim iomega As Integer = szGreekLetters.LastIndexOf(ChrW(&H03A9))
Console.WriteLine("The Greek letter Alpha first appears at index {0}.", _
ialpha)
Console.WriteLIne("The Greek letter Omega last appears at index {0}.", _
iomega)
例 4: 文字配列へのポインターを使用する
次の例では、文字の配列へのポインターから新しい オブジェクトを作成 String する方法を示します。 C# の例は、コンパイラ スイッチを使用してコンパイルする /unsafe
必要があります。
using namespace System;
void main()
{
wchar_t characters[] = {L'H',L'e',L'l',L'l',L'o',L' ',
L'W',L'o',L'r',L'l',L'd',L'!',L'\x0000'};
Char* charPtr = characters;
String^ value = gcnew String(charPtr);
Console::WriteLine(value);
}
// The example displays the following output:
// Hello world!
using System;
public class Example
{
public static unsafe void Main()
{
char[] characters = { 'H', 'e', 'l', 'l', 'o', ' ',
'w', 'o', 'r', 'l', 'd', '!', '\u0000' };
string value;
fixed (char* charPtr = characters) {
value = new String(charPtr);
}
Console.WriteLine(value);
}
}
// The example displays the following output:
// Hello world!
例 5: ポインターと配列の範囲から文字列をインスタンス化する
次の例では、ピリオドまたは感嘆符の文字配列の要素を調べてください。 見つかった場合は、句読点記号の前にある配列内の文字から文字列をインスタンス化します。 ない場合は、配列の内容全体を含む文字列をインスタンス化します。 C# の例は、コンパイラ スイッチを使用してコンパイルする /unsafe
必要があります。
using namespace System;
void main()
{
wchar_t characters[] = {L'H',L'e',L'l',L'l',L'o',L' ',
L'W',L'o',L'r',L'l',L'd',L'!',L'\x0000'};
Char* charPtr = characters;
int length = 0;
Char* iterator = charPtr;
while (*iterator != '\x0000')
{
if (*iterator == L'!' || *iterator == L'.')
break;
*iterator++;
length++;
}
String^ value = gcnew String(charPtr, 0, length);
Console::WriteLine(value);
}
// The example displays the following output:
// Hello World
using System;
public class Example
{
public static unsafe void Main()
{
char[] characters = { 'H', 'e', 'l', 'l', 'o', ' ',
'w', 'o', 'r', 'l', 'd', '!', '\u0000' };
String value;
fixed (char* charPtr = characters) {
int length = 0;
Char* iterator = charPtr;
while (*iterator != '\x0000')
{
if (*iterator == '!' || *iterator == '.')
break;
iterator++;
length++;
}
value = new String(charPtr, 0, length);
}
Console.WriteLine(value);
}
}
// The example displays the following output:
// Hello World
例 6: 符号付きバイト配列へのポインターから文字列をインスタンス化する
次の例は、 コンストラクターを使用して クラスのインスタンスを String 作成する方法を示 String(SByte*) しています。
// Null terminated ASCII characters in a simple char array
char charArray3[4] = {0x41,0x42,0x43,0x00};
char * pstr3 = &charArray3[ 0 ];
String^ szAsciiUpper = gcnew String( pstr3 );
char charArray4[4] = {0x61,0x62,0x63,0x00};
char * pstr4 = &charArray4[ 0 ];
String^ szAsciiLower = gcnew String( pstr4,0,sizeof(charArray4) );
// Prints "ABC abc"
Console::WriteLine( String::Concat( szAsciiUpper, " ", szAsciiLower ) );
// Compare Strings - the result is true
Console::WriteLine( String::Concat( "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper->ToUpper(), szAsciiLower->ToUpper() ) ? (String^)"TRUE" : "FALSE") ) );
// This is the effective equivalent of another Compare method, which ignores case
Console::WriteLine( String::Concat( "The Strings are equal when capitalized ? ", (0 == String::Compare( szAsciiUpper, szAsciiLower, true ) ? (String^)"TRUE" : "FALSE") ) );
unsafe
{
// Null terminated ASCII characters in an sbyte array
String szAsciiUpper = null;
sbyte[] sbArr1 = new sbyte[] { 0x41, 0x42, 0x43, 0x00 };
// Instruct the Garbage Collector not to move the memory
fixed(sbyte* pAsciiUpper = sbArr1)
{
szAsciiUpper = new String(pAsciiUpper);
}
String szAsciiLower = null;
sbyte[] sbArr2 = { 0x61, 0x62, 0x63, 0x00 };
// Instruct the Garbage Collector not to move the memory
fixed(sbyte* pAsciiLower = sbArr2)
{
szAsciiLower = new String(pAsciiLower, 0, sbArr2.Length);
}
// Prints "ABC abc"
Console.WriteLine(szAsciiUpper + " " + szAsciiLower);
// Compare Strings - the result is true
Console.WriteLine("The Strings are equal when capitalized ? " +
(String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper())==0?"true":"false") );
// This is the effective equivalent of another Compare method, which ignores case
Console.WriteLine("The Strings are equal when capitalized ? " +
(String.Compare(szAsciiUpper, szAsciiLower, true)==0?"true":"false") );
}
String(Char*)
重要
この API は CLS 準拠ではありません。
String クラスの新しいインスタンスを初期化し、指定した Unicode 文字配列を指すポインターにより示される値に設定します。
public:
String(char* value);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (char* value);
[System.CLSCompliant(false)]
public String (char* value);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new string : nativeptr<char> -> string
[<System.CLSCompliant(false)>]
new string : nativeptr<char> -> string
パラメーター
- value
- Char*
Unicode 文字の null で終わる配列へのポインター。
- 属性
例外
現在のプロセスは、アドレス指定されたすべての文字に対する読み取りアクセス権を持っているわけではありません。
value
が正しくない Unicode 文字を含む配列を指定しているか、value
が 64000 未満のアドレスを指定しています。
注釈
注意
このおよび他のコンストラクター オーバーロードに関する例と包括的な使用情報については、コンストラクター String
の概要に関する String ページを参照してください。
適用対象
String(Char[])
String クラスの新しいインスタンスを、指定した文字配列で示された Unicode 文字に初期化します。
public:
String(cli::array <char> ^ value);
public String (char[] value);
public String (char[]? value);
new string : char[] -> string
Public Sub New (value As Char())
パラメーター
- value
- Char[]
Unicode 文字の配列。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(ReadOnlySpan<Char>)
String クラスの新しいインスタンスを、指定した読み取り専用スパンで示された Unicode 文字に初期化します。
public:
String(ReadOnlySpan<char> value);
public String (ReadOnlySpan<char> value);
new string : ReadOnlySpan<char> -> string
Public Sub New (value As ReadOnlySpan(Of Char))
パラメーター
- value
- ReadOnlySpan<Char>
Unicode 文字の読み取り専用スパン。
適用対象
String(SByte*)
重要
この API は CLS 準拠ではありません。
String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指すポインターにより示される値に設定します。
public:
String(System::SByte* value);
[System.CLSCompliant(false)]
public String (sbyte* value);
public String (sbyte* value);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (sbyte* value);
[<System.CLSCompliant(false)>]
new string : nativeptr<sbyte> -> string
new string : nativeptr<sbyte> -> string
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new string : nativeptr<sbyte> -> string
パラメーター
- value
- SByte*
終端が null の 8 ビット符号付き整数の配列へのポインター。 整数は、現在のシステム コード ページ エンコーディング (つまり、Default が指定したエンコーディング) を使用して解釈されます。
- 属性
例外
value
が null
です。
String の新しいインスタンス を、value
を使用して初期化できませんでした。value
が ANSI でエンコードされていると想定しています。
value
の Null 終端文字によって決定される初期化する新しい文字列の長さが、大きすぎて割り当てられません。
value
に指定されたアドレスが正しくありません。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(Char, Int32)
String クラスの新しいインスタンスを初期化し、指定した回数だけ繰り返した指定の Unicode 文字が示す値に設定します。
public:
String(char c, int count);
public String (char c, int count);
new string : char * int -> string
Public Sub New (c As Char, count As Integer)
パラメーター
- c
- Char
Unicode 文字。
- count
- Int32
c
の発生回数。
例外
count
が 0 未満です。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(Char*, Int32, Int32)
重要
この API は CLS 準拠ではありません。
String クラスの新しいインスタンスを初期化し、Unicode 文字の配列を指す指定のポインター、配列内の開始文字位置、および長さにより示される値に設定します。
public:
String(char* value, int startIndex, int length);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (char* value, int startIndex, int length);
[System.CLSCompliant(false)]
public String (char* value, int startIndex, int length);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new string : nativeptr<char> * int * int -> string
[<System.CLSCompliant(false)>]
new string : nativeptr<char> * int * int -> string
パラメーター
- value
- Char*
Unicode 文字の配列を指すポインター。
- startIndex
- Int32
value
内の開始位置。
- length
- Int32
使用する value
内の文字数。
- 属性
例外
startIndex
または length
が 0 未満であるか、value
+ startIndex
によりポインターのオーバーフローが発生するか、または現在のプロセスにはすべてのアドレス指定された文字に対する読み取りアクセス許可がありません。
value
が正しくない Unicode 文字を含む配列を指定しているか、value
+ startIndex
が 64000 未満のアドレスを指定しています。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(Char[], Int32, Int32)
String クラスの新しいインスタンスを初期化し、Unicode 文字の配列、配列内の開始文字位置、および長さにより示される値に設定します。
public:
String(cli::array <char> ^ value, int startIndex, int length);
public String (char[] value, int startIndex, int length);
new string : char[] * int * int -> string
Public Sub New (value As Char(), startIndex As Integer, length As Integer)
パラメーター
- value
- Char[]
Unicode 文字の配列。
- startIndex
- Int32
value
内の開始位置。
- length
- Int32
使用する value
内の文字数。
例外
value
が null
です。
startIndex
または length
が 0 未満です。
または
startIndex
と length
の合計が、value
にある要素の数を超えています。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(SByte*, Int32, Int32)
重要
この API は CLS 準拠ではありません。
String クラスの新しいインスタンスを初期化し、8 ビット符号付き整数の配列を指す指定のポインター、配列内の開始位置、および長さにより示される値に設定します。
public:
String(System::SByte* value, int startIndex, int length);
[System.CLSCompliant(false)]
public String (sbyte* value, int startIndex, int length);
public String (sbyte* value, int startIndex, int length);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (sbyte* value, int startIndex, int length);
[<System.CLSCompliant(false)>]
new string : nativeptr<sbyte> * int * int -> string
new string : nativeptr<sbyte> * int * int -> string
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new string : nativeptr<sbyte> * int * int -> string
パラメーター
- value
- SByte*
8 ビット符号付き整数の配列へのポインター。 整数は、現在のシステム コード ページ エンコーディング (つまり、Default が指定したエンコーディング) を使用して解釈されます。
- startIndex
- Int32
value
内の開始位置。
- length
- Int32
使用する value
内の文字数。
- 属性
例外
value
が null
です。
startIndex
または length
が 0 未満です。
または
value
+ startIndex
で指定されたアドレスが現在のプラットフォームにとって大きすぎて、アドレス計算がオーバーフローしました。
または
初期化する新しい文字列の長さが大きすぎて割り当てられません。
value
+ startIndex
で指定されるアドレスは 64 K 未満です。
または
String の新しいインスタンスを、value
を使用して初期化できませんでした (value
が ANSI でエンコードされていると想定)。
value
、startIndex
、length
全体で、正しくないアドレスを指定しています。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。
適用対象
String(SByte*, Int32, Int32, Encoding)
重要
この API は CLS 準拠ではありません。
public:
String(System::SByte* value, int startIndex, int length, System::Text::Encoding ^ enc);
[System.CLSCompliant(false)]
public String (sbyte* value, int startIndex, int length, System.Text.Encoding enc);
public String (sbyte* value, int startIndex, int length, System.Text.Encoding enc);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (sbyte* value, int startIndex, int length, System.Text.Encoding enc);
[<System.CLSCompliant(false)>]
new string : nativeptr<sbyte> * int * int * System.Text.Encoding -> string
new string : nativeptr<sbyte> * int * int * System.Text.Encoding -> string
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new string : nativeptr<sbyte> * int * int * System.Text.Encoding -> string
パラメーター
- value
- SByte*
8 ビット符号付き整数の配列へのポインター。
- startIndex
- Int32
value
内の開始位置。
- length
- Int32
使用する value
内の文字数。
- enc
- Encoding
value
が参照する配列のエンコード方法を指定するオブジェクト。 enc
が null
の場合は、ANSI エンコーディングが指定されていると見なされます。
- 属性
例外
value
が null
です。
startIndex
または length
が 0 未満です。
または
value
+ startIndex
で指定されたアドレスが現在のプラットフォームにとって大きすぎて、アドレス計算がオーバーフローしました。
または
初期化する新しい文字列の長さが大きすぎて割り当てられません。
value
+ startIndex
で指定されるアドレスは 64 K 未満です。
または
String の新しいインスタンスを、value
を使用して初期化できませんでした。value
が enc
の指定に従ってエンコードされていると想定しています。
value
、startIndex
、length
全体で、正しくないアドレスを指定しています。
注釈
注意
このコンストラクターと他のコンストラクターのオーバーロードに関する例と包括的な使用方法については String
、「コンストラクターの概要」を参照してください String 。