前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

11.1. 文字列クラス

BREW では、シングルバイト/マルチバイト文字(ANSI 文字)を表す char 型と、 携帯電話の画面に表示するためのダブルバイト文字を表す AECHAR 型(uint16 型)があります。

SophiaFramewok UNIVERSE では、 これらの文字型はそれぞれ AChar 型、WChar 型として typedef により定義されています。 また、以下の 2 つの文字列クラスが利用可能です。

この 2 つの文字列クラスの機能は、文字列の型以外はすべて同等です。

SFXAnsiString / SFXWideString クラスが所有するバッファはクラス内部で管理され、 AChar 型文字列と WChar 型文字列の変換も自動的に行われます。 そのため、開発者はポインタやヒープ、型変換を意識することなく、文字列を簡単に扱えます。

表 11.1. 文字列を表すクラス

文字の種類 BREW 文字型 SophiaFramework 文字型 SophiaFramework 文字列クラス
シングルバイト/マルチバイト文字(ANSI 文字) char AChar SFXAnsiString
ダブルバイト文字 AECHAR (uint16) WChar SFXWideString

文字列クラス以外に、以下の表にあるような文字列を変換したり、種類を判定するための文字列処理クラスも 3 種類提供されています。

表 11.2. 文字列処理クラス

クラス名 解説
SFXAscii ASCII 文字列特有の処理を行うクラスです。
SFXShiftJIS Shift_JIS エンコード文字列特有の処理を行うクラスです。
SFXTextEncoding 文字エンコードを変換するためのクラスです。

例 11.1. 定義

SFXAnsiString str1("http://");
SFXAnsiString str2("www.s-cradle.com");
SFXAnsiString str3(str1);
SFXAnsiString str4;

上記コードは、変数 str1, str2, str3, str4 を SFXAnsiString オブジェクトとして定義しています。 それぞれの初期値は以下の通りです。

  1. str1: 文字列 "http://"
  2. str2: 文字列 "www.s-cradle.com".
  3. str3: str1 と同じ文字列 "http://"
  4. str4: "" (空の文字列)

例 11.2. 連結

SFXAnsiString str1("http://");
SFXAnsiString str2("www.s-cradle.com");
SFXAnsiString str3;

str3 = str1 + str2;  // str3 は "http://www.s-cradle.com"

str3 += "/index.html"; // str3 = "/index.html"

例 11.3. 挿入 1

SFXAnsiString str3("/index.html");
SFXAnsiString str4;

str4 = str3.Insert(23, "/sophiaframework");  // str4 は "/sophiaframework/index.html"

例 11.4. 挿入 2

// 以下の方法でも同じ結果が得られる
SFXAnsiString str1("/sophiaframework");
SFXAnsiString str3("/index.html");
SFXAnsiString str4;

// 引数に SFXAnsiString オブジェクトを指定できる
str4 = str3.Insert(23, str1);
[Caution] 注意

上のコードを実行しても、str3 の内容は変更されません。

例 11.5. 一部削除

SFXAnsiString str4("/sophiaframework/index.html");

str4 = str4.Remove(23, 39);  // str4 = "/index.html"

例 11.6. 全て削除

SFXAnsiString str4("/index.html");

str4.Clear();
// str4 は "" (空文字列) となる

例 11.7. 長さの取得

SFXAnsiString str4("/index.html");

SInt32 length = str4.GetLengthCString();  // length = 34

  

例 11.8. 末尾の削除

SFXAnsiString str4("/index.html");

// str4 の長さを取得する
SInt32 length = str4.GetLengthCString();

str4 = str4.Remove(length - 11, length);  // str4 は "http://www.s-cradle.com"

例 11.9. 代入( コピー )

SFXAnsiString str1;
SFXAnsiString str2("abc");
SFXAnsiString str3;

str1 = "http://www.s-cradle.com";  // str1 = "http://www.s-cradle.com"; 

str3 = str2;  // str3 = "abc"

例 11.10. 文字の get / set

SFXAnsiString str1("/index1.html");

AChar character = str1[29];  // character = '1' 

str1[29] = '2'; // str1 = "/index2.html"

例 11.11. 部分抜き出し

SFXAnsiString str1("/index.html");
SFXAnsiString str2;

str2 = str1.Substring(7, 23);  // str2 = "www.s-cradle.com" 

例 11.12. 検索

SFXAnsiString str1("/index.html");

SInt32 i = str1.FirstIndexOf("//");   // i = 5
SInt32 j = str1.FirstIndexOf("~");    // ~ は無いので j = -1
SInt32 k = str1.FirstIndexOf("/", 7); // 7 文字目から探し始めるので  k = 23
SInt32 m = str1.LastIndexOf("/");     // m = 23

例 11.13. URL の編集

SFXAnsiString str1("/index.html");

SInt32 m = str1.LastIndexOf("/"); // m = 23

// str1 は "http://www.s-cradle.com"
str1.Remove(m, str1.GetLength()); // 末尾を削除する

// str1 は "/file.xml"
str1 += "/file.xml";

例 11.14. 置換

SFXAnsiString str3("x < y & y < z");

// すべての "<" を "&lt;" に置換する
str3 = str3.Replace("<", "&lt;");

// すべての "&" を "&amp;" に置換する
str3 = str3.Replace("&", "&amp;");

// 下記のように記述してもよい
// str3 = str3.Replace("<", "&lt;").Replace("&", "&amp;");

例 11.15. 比較

if (str1 == str2) {

	// str1 と str2 が等しいとき

}
if (str1 == "abc") {

	// str1 が "abc" のとき
        ...
}
if (str1.Equals("abc", true)) { 

	// str1 が "abc" のとき( 大文字小文字を区別する )
        ...
}
if (str1.Equals("abc", false)) {

	// str1 が "abc" のとき( 大文字小文字を区別しない )
        ...
}
if (str1.StartsWith("http://")) {
	
	// str1 が "http://" で始まるとき
        ...
}

例 11.16. C 言語文字列 ( ポインタ ) の取得

// ACharPtr 型を引数にとる関数
Void func(ACharPtr arg);

func(str1.GetCString());

例 11.17. デバッグウィンドウへの表示

TRACE("%s", str1.GetCString());

例 11.18. 空文字列のチェック

// 例: SFXAnsiString を引数にとる関数
Void func(SFXAnsiString str) {

    if (str.IsEmpty()) { 

        // str が空文字列のとき
        return; // 何も処理しない
    }
    // 関数の本体の処理を記述する
}

例 11.19. 空白の削除

SFXAnsiString string = "   abc"; // string = "   abc"
// Trim 関数は新しい文字列を返すので再代入する
string = string.Trim();          // string = "abc"

例 11.20. 書式出力 ( 整数 → 文字列の変換 )

// str4 = "255.255.0.0:8080"
// 書式は SPRINTF と同じ
str4 = SFXAnsiString::Format("%d.%d.%d.%d:%d", 255, 255, 0, 0, 8080);

例 11.21. 整数への変換

str1 = "10";

SInt32 value = str1.AsSInt32();  // value = 10

例 11.22. BREW インターフェースでの使い方

// ファイル名 str1 のファイルの情報を取得する
SFBFileMgrSmp fileMgr = SFBFileMgr::NewInstance();
fileMgr->GetInfo(str1);

図 11.1. 文字列の描画

文字列の描画

例 11.23. 文字列の描画

// SFXGraphics インスタンスを取得する
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
SFXWideString  str("Hello World!");
SFXRectangle   rectangle(10, 80, 220, 30);

// 文字列の描画 ( 第 1 引数 : 文字列、第 2 引数 : 描画場所、第 3 引数 : アライメント)

// アライメント:左詰め & 上詰め
graphics->DrawSingleText(str, rectangle, IDF_ALIGN_LEFT | IDF_ALIGN_TOP);

// アライメント:中央揃え
graphics->DrawSingleText(str, rectangle.AddY(30), IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);

// アライメント:デフォルト
// graphics->DrawSingleText(str, rectangle.AddY(30), IDF_ALIGN_NONE); と同等
graphics->DrawSingleText(str, rectangle.AddY(30));

// アライメント:右詰め & 下詰め
graphics->DrawSingleText(str, rectangle.AddY(30), IDF_ALIGN_RIGHT | IDF_ALIGN_BOTTOM);

例 11.24. 終了処理

// 終了処理は不要