Chapter 13 String

String は、CharacterVector の要素に対応するスカラー型です。String は C の文字列 char* や C++ の文字列 std::string では対応していない NA 値(NA_STRING)も扱うことができます。

13.1 String オブジェクトの作成

String 型のオブジェクトの作成方法には、大別して、C/C++の文字列から作成する方法、別の String オブジェクトから作成する方法、長さが文字列ベクトルの1つの要素から作成する方法、の3通りの方法があります。また、文字コードも合わせて指定することができます。

13.2 演算子

String には += 演算子が定義されています。これにより文字列の末尾に別の文字列を結合できます。 ( + 演算子は定義されてないので注意してください)

// String オブジェクトの作成
String s("A");

// 文字列を結合します
s += "B";

Rcout << s << "\n"; //"AB"

13.3 メンバ関数

注:メンバ関数 replace_first(), replace_last(), replace_all() は単に文字を置き換えた文字列を返すわけではなく、このオブジェクトの値をそのものを書き換えます。

13.3.1 replace_first( str, new_str)

この String オブジェクトの中で文字列 str と一致する最初に見つけた部分文字列を文字列 new_str に置き換えます。

13.3.2 replace_last( str, new_str)

この String オブジェクトの中で、文字列 str と一致する最後に見つけた部分文字列 str を 文字列 new_str に置き換えます。

13.3.3 replace_all( str, new_str)

この String オブジェクトの中で、文字列 str と一致する全ての部分文字列 str を 文字列 new_str に置き換えます。

13.3.4 push_back(str)

この String オブジェクトの末尾に文字列 str を結合します。( += 演算子と同じ機能)

13.3.5 push_back(str)

この String オブジェクトの先頭に文字列 str を結合します。

13.3.6 set_na()

NA 値をセットします。

13.3.7 get_cstring()

String オブジェクトの文字列を C 言語の文字列定数(const char*)に変換して返します。

13.3.8 get_encoding()

cetype_tで表される文字コードを返します。

13.3.9 set_encoding(enc)

enccetype_t)で指定する文字コード設定します。

13.3.10 コード例

以下のコードでは、“abcdabcd” という文字列に対して、“ab” を “AB” に置換する処理を以下の3通りの方法で実行しています。  (1) “ab” が初めて出現する箇所でのみ置換 (replace_first() メンバ関数)  (2) “ab” が最後に出現する箇所でのみ置換 (replace_last() メンバ関数)  (3) “ab” が出現するすべての箇所で置換 (replace_all() メンバ関数)

なお、メンバ関数 replace_first(), replace_last(), replace_all() は単に文字を置き換えた文字列を返すわけではなく、このオブジェクトの値をそのものを書き換えます。

// [[Rcpp::export]]
void rcpp_replace(){
    //"ab" が初めて出現する箇所でのみ置換します
    String s("abcdabcd");
    s.replace_first("ab", "AB");
    Rcout << s.get_cstring() << "\n"; // ABcdabcd

    //"ab" が最後に出現する箇所でのみ置換します
    s="abcdabcd";
    s.replace_last("ab", "AB");
    Rcout << s.get_cstring() << "\n"; // abcdABcd

    //"ab" が出現するすべての箇所で置換します
    s="abcdabcd";
    s.replace_all("ab", "AB");
    Rcout << s.get_cstring() << "\n"; // ABcdABcd
}

実行結果

> rcpp_string()
ABcdabcd
ABcdabcd
abcdaABd
ABcdABcd