Facebook Twitter Google Maps RSS
Home 未分類 文字列の比較
formats

文字列の比較

Published on 2013年7月12日, by in 未分類.

こんにちは。
陽気なシステム屋の一員のシホンヌです。

システム屋を何年もやっていると、色々な言語を使用して開発をします。
今日はVB、明日はJava、明後日はphp。
よくあることです。
そういうことを繰り返していると、時々混同してしまったり、初めて使う言語なのに当たり前のように過去慣れ親しんだ言語の書き方をしてしまい、結果が思うように得られず焦ることがあります。
特に、文字列の比較…!

文字列Aと文字列Bを比較してその結果を得たい場合、言語によって比較演算子が違います。

例えばVBの場合は文字列の比較に「=」「<>」を使用します。


Dim str1,str2 As String


str1 = “Moji1”
str2 = “Moji2”

If (str1 = “Moji1”) Then ‘str1と”Moji1″が同じ文字列かどうか
        MsgBox “同じ文字列です” ‘同じ文字列の場合、メッセージボックス表示
End If

If (str1 <> str2) Then  ‘str1とstr2が違う文字列かどうか
        MsgBox “違う文字列です”  ‘違う文字列の場合、メッセージボックス表示
End If 

これに慣れ親しんで、javaでやってしまうと想定と違った結果が出てしまうことがあります。
javaでは、文字列の内容を比較する比較演算子にequals()メソッドを使用します。


String str1,str2,str3;
str1  = “Hello”;
str2 = new String(“Hello”);
str3 = “Hello”;


// str1とstr2が同じ文字列かどうか
if (str1.equals(str2))
{

        // 同じ文字列の場合、”同じ文字列です”を出力
        System.out.println(“同じ文字列です”);
}
else
{

        // 同じ文字列でない場合、”違う文字列です”を出力
        System.out.println(“違う文字列です”);
}

上記のプログラムを実行すると、”同じ文字列です”が出力されますが、VBと似たような感覚で下記のように比較すると、str1もstr2も”Hello”という文字列なのにも関わらず、”違う文字列です”という出力がされる分岐に行ってしまいます。

if (str1==str2)
{
        System.out.println(“同じ文字列です”);
}
else
{
        System.out.println(“違う文字列です”);
}

これは、str2は新規にStringオブジェクトを生成している為、str1とstr2が違うオブジェクトとして扱われてしまうためです。
ちなみに、下記if文を実行すると、”同じ文字列です”が出力されます。
これはStringクラスが気を使ってくれた結果です。

if (str1==str3)
{
        System.out.println(“同じ文字列です”);
}
else
{
        System.out.println(“違う文字列です”);
}

たまに文字列の比較を==で行っているプログラムを見かけますが、実行すると想定通りだったりそうでなかったりします。
ちなみにequalsIgnoreCase()メソッドを使うと、大文字小文字を無視して比較します。

また、phpでは文字列の比較に「===」「strcmp」を使用します。
C言語では「strcmp」
rubyでは「==」
objective-cでは「isEqualToString:」
などなど、使用する言語によって同じだったりよく似ていたりして間違えやすいです。
文字列の比較は使用頻度が高く、些細なミスでバグを起こしやすい所なので、簡単な処理だからと言って舐めてかかると痛い目にあいます。
特に初心者はやってしまいがちなバグなので注意すべき処理ですね。

Webサイト開発実績はこちら

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*