0からスタート!ゲーム開発ブログ

ゲーム開発に関する様々な記事を更新します

ゲーム開発に使える!string型の文字列操作処理

文字列操作用の処理


 string 型には文字列操作を行うために便利なメソッドが多く用意されています。

ここでは初心者の方でも理解しやすい文字列操作のメソッドと利用例をいくつか紹介します。

 string 型については、こちらの記事を参考にしてください。


wizardia.hateblo.jp



1.文字列の長さを取得する


 文字列の長さ(文字数)を取得する方法は、以下のようにLengthプロパティを使用することで実現できます。 Length プロパティを使うには、文字列の長さを取得したい string 型の変数の後に Length プロパティを利用します


string str = "Hello, World!";

int length = str.Length;  // ← str 変数に対して Length プロパティを利用することで、str 変数の文字列の長さが取得できる

Debug.Log("文字列の長さ:" + length);  // Console ビューに、"文字列の長さ: 13" が表示される



2.文字列を置き換える


 文字列内の特定の文字列を別の文字列に置き換える方法は、Replaceメソッドを使用することで実現できます。 Replace メソッドを使うには、文字列を置き換えたい string 型の変数の後に Replace メソッドを利用し、 メソッドの引数に("置き換える前の文字列", "置き換えた後の文字列")をカンマ区切りで指定します。

 以下の例では、文字列内の"World"を"Unity"に置き換えています。


string str = "Hello, World!";

string replacedStr = str.Replace("World", "Unity");  // ← str 変数内の World の文字列を置き換える処理

Debug.Log(replacedStr);  // Console ビューに、"Hello, Unity!" が表示される


 この機能は、ゲーム内のミッション名やキャラクター名を置き換えることに活用できます。 特に利用する機会が多いため、プレースホルダという機能と合わせて、サンプルコードを提示いたします。


int price = 100; // 価格を定義
string message = "やくそうは[price]ゴールドだよ"; // メッセージテンプレートを定義


 message 変数に代入している文字列内で利用している [price] の部分は、後で置き換えられるプレースホルダーという機能です。 仮の値を入れておいて、後で実際の値に置き換えられる一時的なマーカーのことをいいます。

 プレースホルダーは、データが動的に変わる場合や、事前に値がわからない場合に、 コードやテキストテンプレートの中に、後で置き換えるための空白を作成する目的で使用されます この部分に変数を活用することで、処理に柔軟性を持たせることが出来ます。

 では、このプレースホルダーの機能を使い、Replace メソッドを使って文字列を置き換えてみましょう。


// Replace メソッドを使って [price] プレースホルダーを実際の価格に置き換えます。
// price.ToString() は整数(int)型の price を文字列に変換します。
string replacedStr = message.Replace("[price]", price.ToString());

Debug.Log(replacedStr); // 置き換えたメッセージを表示します。"やくそうは100ゴールドだよ" と表示されます。


 この例では、"[price]“は後で実際の価格に置き換えられるためのプレースホルダーです。 プログラムの実行時に、Replaceメソッドを使ってプレースホルダーを実際の値(この場合は"100”)に置き換えています。 その結果、最終的なメッセージは “やくそうは100ゴールドだよ” と表示されます。

 このようなプログラムを書いておくことで、アイテムの値段に応じた値をメッセージとして表示させることができますね。 これが処理の柔軟性です。



3.文字列を分割する


 文字列は分割することができます。 分割には Splitメソッドを使用することで実現できます。 Split メソッドを使うには、分割したい string 型の変数の後に Split メソッドを利用し、 メソッドの引数に分割する時の基準とする文字を指定します。

 以下の例では、カンマで区切られた文字列を分割しています。


string str = "apple,orange,banana";

string[] fruits = str.Split(',');  // ← str 変数の文字列を ,(カンマ) の位置で分割する

for (int i = 0; i < fruits.Length; i++) {
    Debug.Log(fruits[i]); // "apple", "orange", "banana" が順に表示される
}


 この機能は、カンマ区切りで作成されたデータ(ゲーム内のアイテムリストや敵キャラクターリストなど)を分割して、ゲーム内で利用できる状態に変換するときに役立ちます。




4.文字列が特定の部分文字列を含むか確認する


 文字列が特定の部分文字列を含むかどうかを確認する方法は、Containsメソッドを使用することで実現できます。 Contains メソッドを使うには、部分文字列を含むか確認したい string 型の変数の後に Contains メソッドを利用し、メソッドの引数に確認したい部分文字列を指定します。

 以下の例では、文字列が特定の部分文字列を含んでいるかどうかを確認しています。


string str = "Hello, World!";

bool containsWorld = str.Contains("World"); // ← str 変数の文字列が "World" を含むか確認する

Debug.Log("Contains 'World': " + containsWorld); // Console ビューに、"Contains 'World': true" が表示される


 この機能は、ゲーム内チャット機能やプレイヤーが入力したテキストに対して、特定のキーワード(禁止用語など)が使われているかどうかを検出したり、 特定のキーワードに反応してイベントを発生させることに利用できます。



5.文字列の先頭および末尾の空白を削除する


 文字列の先頭および末尾にある空白文字を削除する方法は、Trimメソッドを使用することで実現できます。 Trim メソッドを使うには、空白を削除したい string 型の変数の後に Trim メソッドを利用します。

 以下の例では、文字列の先頭と末尾にある空白を削除しています。


string str = "   Hello, World!   "; // 先頭と末尾に空白がある

string trimmedStr = str.Trim(); // ← str 変数の先頭および末尾の空白を削除する

Debug.Log("|" + trimmedStr + "|"); // Console ビューに、"|Hello, World!|" が表示される


 この機能は、文字列の先頭および末尾の空白を削除することで、プレイヤーが入力したテキストの不要な空白を削除し、正確なデータを取得できます。 例えば、プレイヤーがゲーム内でチーム名を入力する際に、意図せず先頭や末尾に空白が入力されることがあります。 Trim メソッドを使用して、これらの空白を削除することで、正確なチーム名を保存し、表示や検索が容易になりますね。



6.文字列の一部を取得する


 文字列の一部を切り出す場合、Substringメソッドを使用します。 Substring メソッドは、切り出したい string 型の変数の後に Substring メソッドを利用し、 引数に切り出し始めるインデックス位置を指定します。 オプションで、切り出す長さも指定できます。

 以下の例では、文字列から指定した位置から指定した長さの部分文字列を取得しています。


string str = "Hello, World!";

string subStr = str.Substring(0, 5);  // ← str 変数の文字列の 0 から始まり、5 文字分を切り出す

Debug.Log(subStr);  // Console ビューに、"Hello" が表示される


 この機能はセーブデータのファイル名から日付やプレイヤー名の部分だけを切り出して、 ゲーム内のセーブデータ一覧表示に活用することなどができます。



まとめ

 文字列操作には他にも様々な処理があり、文字列操作用のメソッドが多数用意されています。

 大文字・小文字変換を行う(ToUpper メソッド、ToLower メソッド)、 特定の文字列で始まるか、終わるか確認する(StartsWith メソッド、EndWith メソッド)、 文字列を連結する(Join メソッド、Concat メソッド)、などです。

 とはいえ、すべてを覚える必要はありません。 まずは今回紹介したような基本的な処理の使い方を覚えることから始めて、徐々に応用的な処理を学んでいってください。




 「こういう処理を作ってみたい」というイメージが頭に浮かんだら、それを実現できるメソッドが用意されていないか、 自分で調べてみるようにするといいでしょう。そこから新しい発見が生まれ、あなたの学習が進んでいきます。

 また、今回提示させていただいた機能には、サンプルコードを記載しています。 プログラムは書いてこそ学習につながります。記事を読んだら実際に自分で書いて、処理の動きを確認してみましょう。