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 つのカテゴリに分類されます。 ポインターを使用するコンストラクターは CLS に準拠していません。 また、Visual Basic ではポインターの使用はサポートされていません。C# では、安全でないコンテキストで実行するためにポインターを使用するコードが必要です。 詳しくは、「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 でlength
startIndex
+ 終わる Unicode 文字をコピーします (例)。
アクセス許可: は SecurityCriticalAttribute、直接の呼び出し元に対する完全な信頼を必要とします。 このメンバーは、部分的に信頼されたコードまたは透過的なコードでは使用できません。
String(SByte* value)
(CLS 準拠ではない) 8 ビット符号付き整数の配列へのポインターによって示される値に新しいインスタンスを初期化します。 配列は、現在のシステム コード ページ (つまり、 で Encoding.Default指定されたエンコード) を使用してエンコードされた文字列を表すものと見なされます。 コンストラクターは、ポインターで指定された位置から value
始まり、null 文字 (0x00) に達するまでの文字を処理します (例)。
アクセス許可: は SecurityCriticalAttribute、直接の呼び出し元に対する完全な信頼を必要とします。 このメンバーは、部分的に信頼されたコードまたは透過的なコードでは使用できません。
String(SByte* value, Int32 startIndex, Int32 length)
(CLS 準拠ではない) 8 ビット符号付き整数の配列へのポインター、その配列内の開始位置、および長さによって示される値に新しいインスタンスを初期化します。 配列は、現在のシステム コード ページ (つまり、 で Encoding.Default指定されたエンコード) を使用してエンコードされた文字列を表すものと見なされます。 コンストラクターは、 から始まり、 - 1 でstartIndex
終わるlength
startIndex
+ 値の文字を処理します (例)。
アクセス許可: は 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 が繰り返される回数。 が 0 の場合 count 、新しいオブジェクトの値は です String.Empty。 |
ポインター パラメーターを含むコンストラクターで String 使用されるパラメーターの完全な一覧を次に示します。 各オーバーロードで使用されるパラメーターについては、上記のオーバーロード構文を参照してください。
パラメーター | Type | 説明 |
---|---|---|
value |
Char* \- または - SByte* |
Unicode 文字の null で終わる配列または 8 ビット符号付き整数の配列へのポインター。 が null または空の配列の場合value 、新しい文字列の値は です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 未満のアドレスを指定します。または 既定のコード ページ エンコードを使用しないため value 、value バイト配列から新しいStringインスタンスを初期化できませんでした。 |
ポインターを持つすべてのコンストラクター。 |
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)、インデックスからインデックス +
startIndex
startIndex
length
- 1 の文字を新しい文字列にコピーします。 が 0 の場合length
、新しい文字列の値は になります String.Empty。コードで同じ値を持つ文字列を繰り返しインスタンス化する場合は、別の方法で文字列を作成することで、アプリケーションのパフォーマンスを向上させることができます。 詳細については、「 繰り返し文字列の処理」を参照してください。
コンストラクターを使用して 0 回以上複製された 1 文字から String(Char, Int32) 。 が 0 の場合
count
、新しい文字列の値は になります String.Empty。または String(Char*, Int32, Int32) コンストラクターを使用String(Char*)して、null で終わる文字配列へのポインターから。 配列全体または指定した範囲を使用して、文字列を初期化できます。 コンストラクターは、指定したポインターから、または指定したポインタープラス
startIndex
から始まり、配列の末尾または文字に続length
く Unicode 文字のシーケンスをコピーします。 が null ポインターまたはlength
ゼロの場合value
、コンストラクターは 値が であるString.Empty文字列を作成します。 コピー操作が配列の末尾に進み、配列が null で終わっていない場合、コンストラクターの動作はシステムに依存します。 このような条件により、アクセス違反が発生する可能性があります。配列に埋め込み null 文字 (U+0000 または '\0') String(Char*, Int32, Int32) が含まれており、オーバーロードが呼び出された場合、文字列インスタンスには、埋め込まれた null を含む文字が含
length
まれます。 次の例は、2 つの null 文字を含む 10 個の要素の配列へのポインターが メソッドに渡された場合の動作を String(Char*, Int32, Int32) 示しています。 アドレスは配列の先頭であり、配列内のすべての要素が文字列に追加されるため、コンストラクターは 2 つの埋め込み null を含む 10 文字の文字列をインスタンス化します。 一方、同じ配列がコンストラクターに String(Char*) 渡される場合、結果は最初の null 文字を含まない 4 文字の文字列になります。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
#nowarn "9" open System let chars = [| 'a'; 'b'; 'c'; 'd'; '\000'; 'A'; 'B'; 'C'; 'D'; '\000' |] let s = use chPtr = fixed chars String(chPtr, 0, chars.Length) for ch in s do printf $"{uint16 ch:X4} " printfn "" let s2 = use chPtr = fixed chars String chPtr for ch in s2 do printf $"{uint16 ch:X4} " printfn "" // 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
[] 型として定義する必要があることを意味します。オーバーロードがString(Char*)呼び出され、配列が null で終了しない場合、またはオーバーロードが呼び出され
startIndex
+length
、-1 に文字シーケンスに割り当てられたメモリの範囲外にある範囲が含まれている場合String(Char*, Int32, Int32)、コンストラクターの動作はシステムに依存し、アクセス違反が発生する可能性があります。符号付きバイト配列へのポインターから。 配列全体または指定した範囲を使用して、文字列を初期化できます。 バイトのシーケンスは、既定のコード ページ エンコードを使用して解釈することも、コンストラクター呼び出しでエンコードを指定することもできます。 コンストラクターが null で終了しない配列全体から文字列をインスタンス化しようとした場合、または 配列
value
+startIndex
の 範囲が配列に +value
+startIndex
length
割り当てられたメモリの範囲外にある場合、このコンストラクターの動作はシステム依存であり、アクセス違反が発生する可能性があります。符号付きバイト配列をパラメーターとして含む 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 String(SByte*, Int32, Int32) のバイトが含まれており、オーバーロードが呼び出された場合、文字列インスタンスには、埋め込まれた null を含む文字が含まれます
length
。 次の例は、2 つの null 文字を含む 10 個の要素の配列へのポインターが メソッドに渡された場合の動作を String(SByte*, Int32, Int32) 示しています。 アドレスは配列の先頭であり、配列内のすべての要素が文字列に追加されるため、コンストラクターは 2 つの埋め込み null を含む 10 文字の文字列をインスタンス化します。 一方、同じ配列がコンストラクターに String(SByte*) 渡される場合、結果は最初の null 文字を含まない 4 文字の文字列になります。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
#nowarn "9" open System let bytes = [| 0x61y; 0x62y; 0x063y; 0x064y; 0x00y; 0x41y; 0x42y; 0x43y; 0x44y; 0x00y |] let s = use bytePtr = fixed bytes String(bytePtr, 0, bytes.Length) for ch in s do printf $"{uint16 ch:X4} " printfn "" let s2 = use bytePtr = fixed bytes String bytePtr for ch in s do printf $"{uint16 ch:X4} " printfn "" // The example displays the following output: // 0061 0062 0063 0064 0000 0041 0042 0043 0044 0000 // 0061 0062 0063 0064
String(SByte*)コンストラクターと String(SByte*, Int32, Int32) コンストラクターは既定の ANSI コード ページを使用して解釈
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 番目の文字列を作成します。 これらは、新しい String オブジェクトをインスタンス化する最も一般的な 2 つの方法です。
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.
let value1 = "This is a string."
let value2 = value1
printfn "%s" value1
printfn "%s" 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
let charArr1 = [| '\u2200'; '\u2202'; '\u200F'; '\u2205' |]
let szMathSymbols = String charArr1
// Unicode Letterlike Symbols
let charArr2 = [| '\u2111'; '\u2118'; '\u2122'; '\u2126' |]
let szLetterLike = String charArr2
// Compare Strings - the result is false
printfn $"The Strings are equal? %b{String.Compare(szMathSymbols, szLetterLike) = 0}"
' 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 つの文字を繰り返す
次の例では、文字配列の一部から新 String しいオブジェクトを作成する方法と、1 つの文字が複数出現する新しい 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
let szGreekAlpha = String('\u0391',5)
// Create a Unicode String with a Greek Omega character
let szGreekOmega = String([| '\u03A9'; '\u03A9'; '\u03A9' |],2,1)
let szGreekLetters = String.Concat(szGreekOmega, szGreekAlpha, szGreekOmega.Clone())
// Examine the result
printfn $"{szGreekLetters}"
// The first index of Alpha
let ialpha = szGreekLetters.IndexOf '\u0391'
// The last index of Omega
let iomega = szGreekLetters.LastIndexOf '\u03A9'
printfn $"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!
#nowarn "9"
open System
let characters =
[| 'H'; 'e'; 'l'; 'l'; 'o'; ' '
'w'; 'o'; 'r'; 'l'; 'd'; '!'; '\u0000' |]
let value =
use charPtr = fixed characters
String charPtr
printfn $"{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
#nowarn "9"
open System
open FSharp.NativeInterop
let characters =
[| 'H'; 'e'; 'l'; 'l'; 'o'; ' '
'w'; 'o'; 'r'; 'l'; 'd'; '!'; '\u0000' |]
[<EntryPoint>]
let main _ =
use charPtr = fixed characters
let mutable length = 0
let mutable iterator = charPtr
let mutable broken = false
while not broken && NativePtr.read iterator <> '\u0000' do
if NativePtr.read iterator = '!' || NativePtr.read iterator = '.' then
broken <- true
else
iterator <- NativePtr.add iterator 1
length <- length + 1
String(charPtr, 0, length)
|> printfn "%s"
0
// 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") );
}
// Null terminated ASCII characters in an sbyte array
let szAsciiUpper =
let sbArr1 = [| 0x41y; 0x42y; 0x43y; 0x00y |]
// Instruct the Garbage Collector not to move the memory
use pAsciiUpper = fixed sbArr1
String pAsciiUpper
let szAsciiLower =
let sbArr2 = [| 0x61y; 0x62y; 0x63y; 0x00y |]
// Instruct the Garbage Collector not to move the memory
use pAsciiLower = fixed sbArr2
String(pAsciiLower, 0, sbArr2.Length)
// Prints "ABC abc"
printfn $"{szAsciiUpper} {szAsciiLower}"
// Compare Strings - the result is true
printfn $"The Strings are equal when capitalized ? %b{String.Compare(szAsciiUpper.ToUpper(), szAsciiLower.ToUpper()) = 0}"
// This is the effective equivalent of another Compare method, which ignores case
printfn $"The Strings are equal when capitalized ? %b{String.Compare(szAsciiUpper, szAsciiLower, true) = 0}"
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);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (sbyte* value);
[<System.CLSCompliant(false)>]
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);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public String (sbyte* value, int startIndex, int length);
[<System.CLSCompliant(false)>]
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);
[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
[<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 参照してください。