はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】文字列をいろんな条件で比較してみた

はじめに

今回はstring型のオブジェクトをいろんな条件で比較してみる記事になります。

文字列と聞くと嫌になるほど扱ってきた経験がある人が多いのではないでしょうか?
そんな文字列には大文字であったりカタカナであったりといったいろんな種類があります。
それらを上手く比較する方法を紹介したいと思います!

文字列の比較

最初に前提として、string型は値型ではなく参照型です。

f:id:hanaaaaaachiru:20190325204754p:plain

ただstring型の文字列の比較==別のオブジェクトを参照していても、文字列が同じならば等しいと判定します。(大半の参照型はデフォルトではオブジェクトが同じかをみます)

f:id:hanaaaaaachiru:20190325205337p:plain

大文字と小文字を区別せずに比較する

大文字と小文字を区別せずに比較するにはstring.Compare静的メソッドを使います。
このメソッドのignoreCaseという引数をtrueにすることで実現できます。

using UnityEngine;

public class Hoge: MonoBehaviour
{

    private void Start()
    {
        string str1 = "unity";
        string str2 = "UNITY";

        if(string.Compare(str1, str2, ignoreCase:true) == 0)
        {
            Debug.Log("等しい");      //こちらが実行される
        }
        else
        {
            Debug.Log("等しくない");  //こちらは実行されない
        }
    }
}

ひらながとカタカタを区別せずに比較する

ひらながとカタカタを区別せずに比較するにはCultureInfoCompareOptionsという引数を与えます。

using UnityEngine;
using System.Globalization;     //CultureInfoクラス,CompareOptions列挙型を使うために追加する

public class Hoge: MonoBehaviour
{

    private void Start()
    {
        string str1 = "ゆにてぃ";
        string str2 = "ユニティ";
        var cultureInfo = new CultureInfo("ja-JP");
  
        if(string.Compare(str1, str2, cultureInfo, CompareOptions.IgnoreKanaType) == 0)
        {
            Debug.Log("等しい");      //こちらが実行される
        }
        else
        {
            Debug.Log("等しくない");  //こちらは実行されない
        }
    }
}

全角と半角を区別せずに比較する

全角と半角を区別せずに比較するにはCultureInfoCompareOptionsという引数を与えます。

using UnityEngine;
using System.Globalization;     //CultureInfoクラス,CompareOptions列挙型を使うために追加する

public class Hoge: MonoBehaviour
{

    private void Start()
    {
        string str1 = "UNITY";
        string str2 = "UNITY";
        var cultureInfo = new CultureInfo("ja-JP");
  
        if(string.Compare(str1, str2, cultureInfo, CompareOptions.IgnoreWidth) == 0)
        {
            Debug.Log("等しい");      //こちらが実行される
        }
        else
        {
            Debug.Log("等しくない");  //こちらは実行されない
        }
    }
}

さいごに

文字列に関する比較をいくつか紹介させていただきました。
いやはや文字列はやっぱりくせ者ですね・・・。