D 1.0   D 2.0
About Japanese Translation

Last update Sun Dec 19 23:27:29 2010

std.string

文字列を扱う関数の集まりです。型 string, wstring, dstring の値は、文字単位の書き換えを許していません。 文字列構築途中の一文字ずつの書き換えには、 char[], wchar[], dchar[] を使用します。*string 型の 利用は、意図しないエイリアスによる問題を起こしにくくするため推奨されており、 これを使うことでよりロバストなコードになります。

Source:
std/string.d

License:
Boost License 1.0.

Authors:
Walter Bright, Andrei Alexandrescu

typedef StringException;
文字列関数内でのエラー時に投げられます。

immutable char[16u] hexdigits;
0..9A..F

immutable char[10u] digits;
0..9

immutable char[8u] octdigits;
0..7

immutable char[26u] lowercase;
a..z

immutable char[52u] letters;
A..Za..z

immutable char[26u] uppercase;
A..Z

immutable char[6u] whitespace;
ASCII の空白文字

dchar LS;
UTF の改行文字

dchar PS;
UTF の改段落文字

immutable char[2u] newline;
このシステムでの改行文字列

bool iswhite(dchar c);
c が空白文字のとき true を返します

int cmp(C1, C2)(in C1[] s1, in C2[] s2);
sizediff_t icmp(in char[] s1, in char[] s2);
二つの文字列を比較します。cmp は大文字小文字を区別します。 icmp は区別しません。

Returns:
< 0 s1 < s2
= 0 s1 == s2
> 0 s1 > s2
immutable(char)* toStringz(const(char)[] s);
immutable(char)* toStringz(string s);
Dの配列をC風の0終端文字列へ変換します。 s[] の中に \0 が含まれていてはいけません。

enum CaseSensitive;
検索の際に大文字小文字を区別するかどうかのフラグです

sizediff_t indexOf(Char1, Char2)(const(Char1)[] s, const(Char2)[] sub, CaseSensitive cs = CaseSensitive.yes);
ptrdiff_t lastIndexOf(in char[] s, dchar c, CaseSensitive cs = (CaseSensitive).yes);
indexOf: 文字 c の、文字列 s での最初の出現位置を返します。lastIndexOf: 文字 c の、文字列 s での最後の出現位置を返します。CaseSensitive.yes 指定は、大文字小文字を区別して検索することを意味します。

Returns:
見つかったら c の出現したindexを、見つからなければ -1 を返します。

sizediff_t indexOf(Char1, Char2)(in Char1[] s, in Char2[] sub, CaseSensitive cs = CaseSensitive.yes);
ptrdiff_t lastIndexOf(in char[] s, in char[] sub, CaseSensitive cs = (CaseSensitive).yes);
文字列 s 中の sub の最初/最後の出現位置を返します。 CaseSensitive cs によって、 大文字小文字の区別を制御します。



Returns:
見つかったら sub[] の出現したindexを、見つからなければ -1 を返します。

S tolower(S)(S s);
文字列を小文字に変換

void tolowerInPlace(C)(ref C[] s);
文字列 s をinplaceで小文字に変換

S toupper(S)(S s);
文字列を大文字に変換

void toupperInPlace(C)(ref C[] s);
文字列 s をinplaceで大文字に変換

string capitalize(string s);
最初の一文字を大文字、 残りを小文字に変換します

string capwords(string s);
文字列中の全ての単語をキャピタライズします。 また、先頭と末尾の全ての空白を除き、 連続する空白文字を一文字にまとめます。

string repeat(string s, size_t n);
文字列 s[] を n 回繰り返し結合した文字列を返します

string join(in string[] words, string sep);
sep をセパレータとして全ての文字列を結合します

S[] split(S)(S s);
s[] を単語の配列へ分割します。 空白文字を区切りとして使います。

Unqual!(S1)[] split(S1, S2)(S1 s, S2 delim);
s[] を単語の配列へ分割します。 delim[] を区切りとして使います。

S[] splitlines(S)(S s);
s[] を行の配列へ分割します。 CR, LF, CR-LF を区切りとして使います。 改行文字そのものは結果文字列には含まれません。

String stripl(String)(String s);
String stripr(String)(String s);
String strip(String)(String s);
先頭、末尾、あるいは両方の空白文字を取り除きます。

C[] chomp(C)(C[] s);
C[] chomp(C, C1)(C[] s, in C1[] delimiter);
s[] から末尾の delimiter[] を(もし存在すれば)取り除いた文字列を返します。 delimiter[] が null の時、末尾の CR,LF,CRLF が全て取り除かれます。

C1[] chompPrefix(C1, C2)(C1[] longer, C2[] shorter);
longer.startsWith(shorter) が真なら longer[shorter.length .. $] を返し、それ以外では longer を返します。

string chop(string s);
s[] から末尾の文字を取り除いた文字列を返します。 最後の二文字が CR-LF であれば、二文字とも取り除きます。

string ljustify(string s, size_t width);
string rjustify(string s, size_t width);
string center(string s, int width);
width 文字の中で文字を左寄せ/右寄せ/センタリングします。

string zfill(string s, int width);
rjustify() と同じですが、空白でなく '0' で埋めます。

string replace(string s, string from, string to);
s[] での from[] の出現を to[] に置き換えた文字列を返します。

string replaceSlice(string s, in string slice, in string replacement);
文字列 s[] のスライス slice[] を replacement[] に置き換えた文字列を返します。

string insert(string s, size_t index, string sub);
s[] の位置 indxe に sub[] を挿入した文字列を返します。

size_t count(in char[] s, in char[] sub);
s[] 内での sub[] の出現回数をカウントします。

string expandtabs(string str, int tabsize = 8);
タブを適切な個数の空白文字へ置き換えます。 tabsize がタブ幅です。

string entab(string s, int tabsize = 8);
文字列 s 内の空白文字を最適な個数のタブ文字に置き換えます。 行末の空白やタブは削除されます。

Params:
string s 変換したい文字列
int tabsize tabsize 個の空白がタブ幅になります。デフォルトは8です。

string maketrans(in string from, in string to);
translate() 用の変換テーブルを作成

BUG:
ASCII文字に対してのみ動作します

string translate(string s, in string transtab, in string delchars);
s[] 内の文字を、maketrans() で作られたテーブルに従って変換します。 delchars[] 内の文字は削除します。

BUG:
ASCII文字に対してのみ動作します

string format(...);
引数を文字列へと整形します。

char[] sformat(char[] s,...);
引数を整形して文字列 s へ格納します。 サイズが小さすぎる場合は RangeError を投げます。

Returns:
s

bool inPattern(dchar c, in string pattern);
文字 cpattern に含まれるか否か判定

Patterns:
pattern は、正規表現で言う 文字列クラス のような文字の配列です。基本的には文字の列によって指定することができます。 例えば、"abcde" などです。また、'-' 文字は文字の範囲を表現します。 例えば "a-e" は "abcde" と同じパターンを表現し、 "a-fA-F0-9" は16進表現に使う全ての文字を表現します。 もし最初の文字が '^' ならば、 パターンが反転されます。つまり例えば、"^0-9" は数字以外の文字を意味します。 以下の関数 inPattern, countchars, removeschars, squeezepatternを使います。

Note:
将来的には、 pattern の構文はより正規表現の文字クラスに近い形へと改良される予定です。

int inPattern(dchar c, string[] patterns);
cpatterns の全てのパターンに含まれているか否かを返します

size_t countchars(string s, string pattern);
文字列 s 中の pattern に含まれる文字の数を返します。

string removechars(string s, in string pattern);
文字列 s のうち、pattern にマッチした文字を全て取り除いたものを返します。

string squeeze(string s, string pattern = null);
pattern にマッチする文字の複数文字の繰り返しを取り除きます。 patternnull ならば、全ての文字が適用対象になります。

S1 munch(S1, S2)(ref S1 s, S2 pattern);
s の中で最初に pattern (inPattern で定義されているもの) とマッチしない文字の位置 pos を探し、s = s[pos..$] と更新します。返値は、 更新前の文字列の pos の手前までのスライスです。

Example:
string s = "123abc";
string t = munch(s, "0123456789");
assert(t == "123" && s == "abc");
t = munch(s, "0123456789");
assert(t == "" && s == "abc");
この munch 関数は、parse中に なにかの種類の文字 (例えばホワイトスペース) を読み飛ばしたいときに便利です。 (この場合は、返値は使用されません。)

string succ(string s);
s の'直後'の文字列を返します。 右端の文字が a-zA-Z0-9 ならば、大文字小文字や数字という元の文字種を変えない範囲で 1つ後ろの文字に変更します。 繰り上がりがある場合は、 すぐ左の文字に対して処理が繰り返されます。

string tr(string str, string from, string to, string modifiers = null);
from に含まれている文字が str の中にあると、 str のその部分を対応する to の文字に置き換え、 置換結果の文字列を返します。

Params:
string modifiers modifier文字の並び

Modifiers:
Modifier Description
c from の文字集合の補集合をとります。
d to に対応要素がない場合、その文字は削除します。
s 置換後の文字列で同じ文字が隣り合っていたら重なりを除去します。


Modifier d がある場合、 to は0文字か1文字でなければなりません。

Modifier d がなく、tonull ならば、 tofrom と同じ文字列が使用されます。

Modifier d がなく、tofrom より短い場合、 toto の最後の文字を繰り返す形で拡張されます。

fromto も、- 文字を使った範囲の表現を含むことができます。 例えば a-d は abcd と同義です。 ^ を補集合の意味で使うことはできません。 (この目的には Modifier c を使います。)

final bool isNumeric(string s, in bool bAllowSep = false);
文字列 s が以下の形式かどうかを確かめます:

整数: (for byte, ubyte, short, ushort, int, uint, long, and ulong) ['+'|'-']digit(s)[U|L|UL]

Examples:
123, 123UL, 123L, +123U, -123L

浮動小数点数: (for float, double, real, ifloat, idouble, and ireal) ['+'|'-']digit(s)[.][digit(s)][[e-|e+]digit(s)][i|f|L|Li|fi]] or [nan|nani|inf|-inf]

Examples:
+123., -123.01, 123.3e-10f, 123.3e-10fi, 123.3e-10L

(for cfloat, cdouble, and creal) ['+'|'-']digit(s)[.][digit(s)][[e-|e+]digit(s)][+] [digit(s)[.][digit(s)][[e-|e+]digit(s)][i|f|L|Li|fi]] or [nan|nani|nan+nani|inf|-inf]

Examples:
nan, -123e-1+456.9e-10Li, +123e+10+456i, 123+456

[in] bool bAllowSep デフォルトではfalseです。true にした場合、文字列中の "," や "" といったセパレータを無視して判定します。ただし 変換関数 toInt(), toFloat() などに渡す前には、 これらの文字を取り除かないと エラーになります。

また、先頭、末尾、途中といった場所を問わず、 空白文字は許可されていないことに注意してください。 つまり、この関数やその他変換関数に渡す前に、 空白文字はあらかじめ取り除いておく必要があります。

bool isNumeric(...);
引数として任意のオブジェクトを取ります

bool isNumeric(TypeInfo[] _arguments, va_list _argptr);
第一引数のみを検査し、残りは無視します

char[] soundex(string string, char[] buffer = null);
Soundex アルゴリズム

Soundex アルゴリズムは、発音に基づいて英単語を4文字の文字列に 変換します。 これは、似た発音をもつ綴りに同じSoudex値を割り当てることで、 名前のあいまい検索のインデックス等に 活用できるようにするものです。

Params:
string string Soundex 表現に変換したい文字列
char[] buffer Soundex の結果を格納する4文字の配列を指定します。 null を指定すると、 返値用のバッファはヒープに確保されます。

Returns:
Soundexアルゴリズムの結果を返す4文字の配列を返します。 string に対応するSoundex表現がない場合、null を返します。

See Also:
Wikipedia, The Soundex Indexing System

BUGS:
英語の名前に対してのみ動作します。 他により良い結果を返すといわれる Soundex アルゴリズムもありますが、 これが標準的な方式です。

string[string] abbrev(string[] values);
value に含まれる文字列の中の一つを確定するのに 十分な長さの全ての省略形からの連想配列を返します。

この関数は、ユーザが既知の文字列集合のうちのどれかをタイプする際に、 十分な文字が入力されたら プログラムが自動補完して ユーザーの手間を減らす処理などに役立ちます。

Example:
 import std.stdio;
 import std.string;

 void main()
 {
    static string[] list = [ "food", "foxy" ];

    auto abbrevs = std.string.abbrev(list);

    foreach (key, value; abbrevs)
    {
       writefln("%s => %s", key, value);
    }
 }
以下のように出力されます:
 fox => foxy
 food => food
 foxy => foxy
 foo => food
 


size_t column(string str, int tabsize = 8);
文字列 string が0桁目から開始するとしたとき、 文字列全体の右端が何桁目に達するかを返します。

string wrap(string s, int columns = 80, string firstindent = null, string indent = null, int tabsize = 8);
文字列の折り返し処理をします。

入力文字列 s を、\nでいくつかの行に分割して 段落の形にします。 各行の長さは columns を超えないように 調整されます。 最後の行は \n で終了します。

Params:
string s 折り返し処理の対象とする文字列
int columns 段落の最大桁数
string firstindent 段落の先頭行のインデントに用いる文字列
string indent 段落の後続行のインデントに用いる文字列
int tabsize タブの桁数

Returns:
変換結果の段落文字列
struct ByCodeUnit(Range,Unit) if (isInputRange!(Range) && staticIndexOf!(Unqual!(Unit),char,wchar,dchar) >= 0 && staticIndexOf!(Unqual!(ElementType!(Range)),char,wchar,dchar) >= 0 && !is(Unqual!(ElementType!(Range)) == Unqual!(Unit)));

bool empty();
ElementType front();
ElementType back();
void popBack();
レンジとして操作するためのプリミティブ