|
DelphiXE3 [FMX] TStringHelper 2014/06/19 |
前回は、型、文字について記述しましたが、ここではその TStringHelper について少し見ていきます。TStringHelper とは何なのか? ヘルプでは
type TStringHelper = record helper for string; |
インデックスがゼロから始まる文字列を扱うための関数やプロパティを提供するレコード ヘルパです。
ヒント:XE3(およびそれ以前のリリース)の Delphi および
C++Builder では、文字列のインデックスはデフォルトで
1 から始まります。 |
とあり「レコードヘルパ」との事です。それでは「レコードヘルパ」とは?
クラス ヘルパとレコード ヘルパは型の 1 つです。他のクラスやレコードと関連付けると、関連付けられた型(またはその下位クラス)のコンテキストで使用されるメソッドに別の名前を追加したり、プロパティを追加します。ヘルパは、継承を使用せずにクラスを拡張する方法であり、継承がまったく許可されないレコードにとっても便利なものです。ヘルパは、識別子を解決するときに、コンパイラが使用するスコープの範囲を広げる機能です。クラス ヘルパやレコード ヘルパを宣言する場合は、ヘルパの名前と、そのヘルパで拡張する型の名前を記述します。規格上、拡張クラスや拡張レコードを使用できるすべての箇所で、ヘルパを使用できます。このため、コンパイラの解決スコープは、元の型にヘルパを加えたものになります。
クラス ヘルパやレコード ヘルパは型を拡張する方法ですが、新規コード開発時に使用する設計ツールとして見なすべきではありません。新規のコードでは常に、通常のクラス継承およびインターフェイス実装を用いるべきです。 |
というわけで、クラスの継承をしない型の拡張方法の1つ、のようです。見た目は、オブジェクト思考プログラミング(OOP)のような感じもしますが、厳密にはそういう訳でも無さそうですね。
それでは TStringHelper について見てみます。
TStringHelper は System.SysUtils 内で定義されています。
プロパティから。
Chars | property Chars[Index: Integer]: Char read GetChars; |
この 0 基準の文字列内の個々の文字へアクセスします。Chars プロパティは読み取り専用です。
var
I: Integer;
MyString: String;
begin
MyString := 'This is a string.';
for I:= 0 to MyString.Length - 1 do
Write(MyString.Chars[I]);
end. |
出力は以下のとおりです。
|
Length | property Length: Integer read GetLength; |
Length を使用すると、0 基準の文字列の長さを取得することができます。
var
MyString: String;
begin
MyString := 'This is a string.';
Writeln(MyString.Length);
end. |
出力は以下のとおりです。
|
次にメソッドです。
Compare |
class function Compare(const StrA: string;
const StrB: string): Integer;
class function Compare(const StrA: string;
const StrB: string; IgnoreCase: Boolean): Integer;
class function Compare(
const StrA: string; IndexA: Integer;
const StrB: string; IndexB: Integer;
Length: Integer): Integer;
class function Compare(
const StrA: string; IndexA: Integer;
const StrB: string; IndexB: Integer;
Length: Integer; IgnoreCase: Boolean): Integer; |
2 つの 0 基準の文字列が、等しいか比較します。
Compare は static クラス関数
(呼び出し構文はString.Compare(...);)
で、次を返します:
< 0 --- StrA が StrB より前に分類される場合
0 --- StrA が StrB と同じ場合
> 0 --- StrA が StrB の後に分類される場合
Compare には 4 つのオーバーロード関数があります:
・第1 Compare オーバーロード メソッドは、StrA を StrB に対して比較する際、大文字小文字を区別します。
・第2 Compare オーバーロード メソッドは、StrA を StrB に対して比較する際、IgnoreCase パラメータを介して大文字小文字の区別をするかどうかを指定することができます。
・第3 Compare オーバーロード メソッドは、StrA を StrB に対して比較する際、文字列のどの位置から比較を開始するか(IndexA 対 IndexB で)、および、そこから何文字分比較するか(Length)を指定することができます。このメソッドは、大文字小文字を区別します。
・第4 Compare オーバーロード メソッドは、StrA を StrB に対して比較する際、文字列のどの位置から比較を開始するか(IndexA 対 IndexB で)、および、そこから何文字分比較するか(Length)を指定することができます。 このメソッドの場合、さらに IgnoreCase パラメータを介して、大文字小文字を区別するか指定することができます。 |
CompareOrdinal |
class function CompareOrdinal(const strA: string;
const strB: string): Integer;
class function CompareOrdinal(
const strA: string; indexA: Integer;
const strB: string; indexB: Integer;
length: Integer): Integer; |
CompareOrdinal オーバーロード メソッドは、両方とも、現在の実装では -1 を返します。 |
CompareTo | function CompareTo(const strB: string): Integer; |
この 0 基準の文字列を、指定された文字列と比較します。
CompareTo は、大文字小文字を区別し、次の値を返します:
・< 0 --- この文字列が StrB より前に分類される場合
・0 --- この文字列が StrB と同じ場合
・> 0 --- この文字列が StrB の後に分類される場合 |
Contains | function Contains(const Value: string): Boolean; |
この 0 基準の文字列が、指定された文字列を含んでいるかどうかを返します。
Contains は、文字列が Value パラメータで指定された文字列を含んでいる場合には True を、そうでなければ False を返します。 |
Copy | class function Copy(const Str: string): string; |
0 基準の指定された文字列を、コピーして返します。
Copy は、Str パラメータで指定された 0 基準の文字列をコピーし、それを返します。Copy は、static クラス関数です。 |
CopyTo |
procedure CopyTo(SourceIndex: Integer;
var destination: array of Char;
DestinationIndex: Integer; Count: Integer); |
0 基準の文字列内の複数文字列のために確保されたメモリを、別の 0 基準の文字列内の文字群のために確保されたメモリへコピーします。
CopyTo 関数は、Move 関数と同様です。 |
Create |
class function Create(C: Char; Count: Integer): string;
class function Create(const Value: array of Char;
StartIndex: Integer; Length: Integer): string;
class function Create(const Value: array of Char): string; |
オブジェクトを作成し,そのオブジェクトが最初に使用される前にデータを初期化します。 |
対になる Free は無い様子です。形式的なものとして定義されている様子?
EndsText |
class function EndsText(
const ASubText, AText: string): Boolean; |
指定された 0 基準の文字列が、指定された 0 基準のサブ文字列で終わっているかどうかを返します。
ヒント: EndsText は、大文字小文字を区別しません。 |
大文字小文字は区別しませんが、半角全角は区別します。
EndsWith |
function EndsWith(const Value: string): Boolean;
function EndsWith(const Value: string;
IgnoreCase: Boolean): Boolean; |
この 0 基準の文字列が、指定されたサブ文字列で終わっているかどうかを返します。
EndsWith は、この文字列が、Value で渡された文字列で終わっているかどうかを返す関数です。EndsWith は、第2 オーバーロード関数が使用されている場合には、大文字小文字を区別します。IgnoreCase パラメータで、大文字小文字を区別するかを指定します。 |
Equals |
function Equals(const Value: string): Boolean;
class function Equals(
const a: string; const b: string): Boolean; |
指定された 2 つの 0 基準の文字列が同一かどうかを返します。
Equals は、2 つの 0 基準の文字列が同一かどうかを返す関数です。Equals にはオーバーロード メソッドが 2 つあります。 第 1 メソッドは、この文字列が、Value パラメータで渡された文字列と同じかどうかを返します。第 2 オーバーロード メソッドは static クラス関数で、2 つの渡された文字列間の等価性をチェックするために使用することができます。 |
Format |
class function Format(const Format: string;
const args: array of const): string; |
Format 関数と同一です。
Format はクラス関数で、指定されたパラメータをベースとする、書式付き 0 基準の文字列を返します。 |
GetHashCode | function GetHashCode: Integer; |
現在の実装では -1 を返します。 |
IndexOf |
function IndexOf(value: Char): Integer;
function IndexOf(const Value: string): Integer;
function IndexOf(Value: Char;
StartIndex: Integer): Integer;
function IndexOf(const Value: string;
StartIndex: Integer): Integer;
function IndexOf(Value: Char;
StartIndex: Integer; Count: Integer): Integer;
function IndexOf(const Value: string;
StartIndex: Integer; Count: Integer): Integer; |
この 0 基準の文字列内で、ある文字またはある文字列が最初に現れる位置を示す整数を返します。
StartIndex で、IndexOf メソッドが検索を開始する 0 基準の文字列内でのオフセットを示し、Count で、検索を終了する終端オフセットを指定します。 |
Pos関数の代わりですね。
IndexOfAny |
function IndexOfAny(
const AnyOf: array of Char): Integer;
function IndexOfAny(
const AnyOf: array of Char;
StartIndex: Integer): Integer;
function IndexOfAny(
const AnyOf: array of Char;
StartIndex: Integer; Count: Integer): Integer; |
指定された文字が、この 0 基準の文字列内で最初に現れる場所を示す整数を返します。
例:
MyString.IndexOfAny(['w', 's', 'a'], 0) |
Insert |
function Insert(StartIndex: Integer;
const Value: string): string; |
文字列をこの 0 基準の文字列の指定された位置に挿入します。 |
IsDelimiter |
function IsDelimiter(const Delimiters: string;
Index: Integer): Boolean; |
この 0 基準の文字列内の指定された文字が、区切り文字セット内のいずれかと一致するかどうかを示します。
IsDelimiter は、この 0 基準の文字列内のバイト オフセット Index にある文字が、文字列 Delimiters 内の区切り文字のいずれかに該当するかどうかを判断します。
例:
MyString.IsDelimiter(',.; ', 5) |
IsEmpty | function IsEmpty: Boolean; |
0 基準の文字列が空(文字を含んでいない)かどうかを返します。 |
IsNullOrEmpty |
class function IsNullOrEmpty(
const Value: string): Boolean; |
static クラス関数で、指定された文字列が空(文字を含んでいない)かどうかを返します。 |
IsNullOrWhiteSpace |
class function IsNullOrWhiteSpace(
const Value: string): Boolean; |
現在の実装では、常に False を返します。 |
Join |
class function Join(const Separator: string;
const values: array of const): string;
class function Join(const Separator: string;
const Values: array of string): string;
class function Join(const Separator: string;
const Values: IEnumerable<string>): string;
class function Join(const Separator: string;
const value: array of string;
StartIndex: Integer; Count: Integer): string; |
指定された Separator で区切られた、2 つ以上の 0 基準の文字列を結合します。
例:
String.Join(',', ['String1', 'String2', 'String3']));
String.Join(',', ['String1', 'String2', 'String3'],1,2));
System.SysUtils.TStringHelper.Join には 4 つのオーバーロード メソッドがあります。第 1 および第 3 は、現在の実装では常に空文字列('')を返します。他の 2 つのオーバーロード メソッドでは、任意の数の文字列を結合すること、また、配列の指定された開始インデックスの文字列から、終了インデックスの文字列までを、結合することもできます。上記のコード スニペットを参照してください。 |
LastDelimiter |
function LastDelimiter(
const Delims: string): Integer; |
この 0 基準の文字列内で、Delims 内のいずれかの文字に一致する、もっとも右にある文字のバイト インデックスを返します(ただし null = #0)。 |
LastIndexOf |
function LastIndexOf(Value: Char): Integer;
function LastIndexOf(const Value: string): Integer;
function LastIndexOf(Value: Char;
StartIndex: Integer): Integer;
function LastIndexOf(const Value: string;
StartIndex: Integer): Integer;
function LastIndexOf(Value: Char;
StartIndex: Integer; Count: Integer): Integer;
function LastIndexOf(const Value: string;
StartIndex: Integer; Count: Integer): Integer; |
現在の 0 基準の文字列内における、Value 文字列の最後のインデックスを返します。
StartIndex で、IndexOf メソッドが検索を開始する 0 基準の文字列内でのオフセットを示し、Count で、検索を終了する終端オフセットを指定します。
LastIndexOf には 6 つのオーバーロード メソッドがあり、この 0 基準の文字列内のある指定された文字列の最後のインデックスを取得する際に、さまざまなオプションを指定することができます。 |
IndexOfは最初に見つけた位置を返しますが、これは最後に見つけた位置を返す、という事でしょう。
LastIndexOfAny |
function LastIndexOfAny(
const AnyOf: array of Char): Integer;
function LastIndexOfAny(
const AnyOf: array of Char;
StartIndex: Integer): Integer;
function LastIndexOfAny(
const AnyOf: array of Char;
StartIndex: Integer; Count: Integer): Integer; |
現在の 0 基準の文字列内における、AnyOf 文字配列のいずれかの最後のインデックスを返します。 |
PadLeft |
function PadLeft(TotalWidth: Integer): string;
function PadLeft(TotalWidth: Integer;
PaddingChar: Char): string; |
この 0 基準の文字列を、固定長テキスト領域内で右に揃えて配置し、左側を空白で埋めます。
例:
MyString2 := '123';
MyString2.PadLeft(5) → 「 123」(半角空白2つ付加) |
PadRight |
function PadRight(TotalWidth: Integer): string;
function PadRight(TotalWidth: Integer;
PaddingChar: Char): string; |
この 0 基準の文字列を、固定長テキスト領域内で左に揃えて配置し、右側を空白で埋めます。
例:
MyString2 := '123';
MyString2.PadRight(5) → 「123 」(半角空白2つ付加) |
Remove |
function Remove(StartIndex: Integer): string;
function Remove(StartIndex: Integer;
Count: Integer): string; |
0 基準の文字列から位置 StartIndex からのサブ文字列を削除します。指定されている場合には、位置 StartIndex + Count までを削除対象とします。 |
Replace |
function Replace(OldChar: Char; NewChar: Char): string;
function Replace(OldChar: Char; NewChar: Char;
ReplaceFlags: TReplaceFlags): string;
function Replace(const OldValue: string;
const NewValue: string): string;
function Replace(const OldValue: string;
const NewValue: string;
ReplaceFlags: TReplaceFlags): string; |
それまでの文字または文字列を、新しく指定された文字または文字列で置換します。
Replace には 4 つのオーバーロード メソッドがあります。最初の 2 つは文字だけを、第 3、第 4 では文字列を置換します。ReplaceFlags パラメータは、rfIgnoreCase や rfReplaceAll などのフラグを使用するために導入されています。 |
type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);
rfReplaceAll
すべての文字を置換。このフラグが含まれていない場合,対象部分文字列内の最初の文字だけを置換する。
rfIgnoreCase
部分文字列の比較は,大文字と小文字を区別しないで行う。このフラグが含まれていない場合,部分文字列の一致は大文字と小文字を区別した比較で識別される。 |
Split |
function Split(const Separator: array of Char)
: TArray<string>;
function Split(const Separator: array of Char;
Count: Integer): TArray<string>;
function Split(const Separator: array of Char;
Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of string;
Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of Char;
Count: Integer;
Options: TStringSplitOptions): TArray<string>;
function Split(const Separator: array of string;
Count: Integer;
Options: TStringSplitOptions): TArray<string>; |
この 0 基準の文字列をサブ文字列に、指定された Separator を使用して分けます。
Split には 6 つのオーバーロード メソッドがあり、各メソッドでさまざまなオプションを使用できます。 |
TStringSplitOptions = (None, ExcludeEmpty); |
StartsWith |
function StartsWith(const Value: string): Boolean;
function StartsWith(const Value: string;
IgnoreCase: Boolean): Boolean; |
この 0 基準の文字列が指定された文字列で始まっているかどうかを返します。
この 0 基準の文字列の開始文字列であるかを確認したい文字列は、Value パラメータで渡します。第 2 オーバーロード StartsWith 関数の IgnoreCase パラメータにより、大文字小文字は区別しないで比較することもできます。 |
Substring |
function Substring(StartIndex: Integer): string;
function Substring(StartIndex: Integer;
Length: Integer): string; |
0 基準の文字列から、位置 StartIndex から始まるサブ文字列を返します。任意で、終わりの位置 StartIndex + Length を指定することも可能です。 |
Copy関数の代わりですね。
ToCharArray |
function ToCharArray: TArray<Char>;
function ToCharArray(StartIndex: Integer;
Length: Integer): TArray<Char>; |
この 0 基準の文字列を TArray<Char>(1 文字配列)に変換し、それを返します。 |
ToLower | function ToLower: string; |
この 0 基準の文字列を、すべて小文字の文字列に変換して、それを返します。 |
半角文字のみ変換されます。
ToLowerInvariant | function ToLowerInvariant: string; |
この 0 基準の文字列を、すべて小文字の文字列に変換して、それを返します。この変換は、Unicode 仕様に従い、UTF-16 文字表現を使用して行われます。 |
全角文字も変換されます。
ToUpper | function ToUpper: string; |
この 0 基準の文字列を、すべて大文字の文字列に変換して、それを返します。 |
半角文字のみ変換されます。
ToUpperInvariant | function ToUpperInvariant: string; |
この 0 基準の文字列を、すべて大文字の文字列に変換して、それを返します。 この変換は、Unicode 仕様に従い、UTF-16 文字表現を使用して行われます。 |
全角文字も変換されます。
Trim |
function Trim: string;
function Trim(const TrimChars: array of Char): string; |
この 0 基準の文字列から、前後の空白を取り除き、文字群を制御します。
Trim にはオーバーロード メソッドが 2 つあります。 第 1 メソッドはパラメータを取らず、第 2 メソッドは、どの文字(文字の配列の形式で指定)を、この 0 基準の文字列から取り除くかを指定することができます。 |
TrimEnd |
function TrimEnd(
const TrimChars: array of Char): string; |
指定された末尾の文字を、この 0 基準の文字列から取り除きます。
TrimChars パラメータでは、どの文字(文字の配列の形式で指定)を、この 0 基準の文字列の末尾から取り除くかを指定することができます。 |
TrimStart |
function TrimStart(
const TrimChars: array of Char): string; |
指定された先頭の文字を、この 0 基準の文字列から取り除きます。
TrimChars パラメータでは、どの文字(文字の配列の形式で指定)を、この 0 基準の文字列の先頭から取り除くかを指定することができます。 |
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/06/18
2014/06/19
▼2014/06/23
シェアウェア
Script!World
データベース
|