C#で文字列を比較。Compare・Equalsメソッドの使い方
C#で文字列を比較する方法は、「Compareメソッド」と「Equalsメソッド」の二つがあります。
一見どちらも同じように思えますが、両者の比較基準は全く異なります。それぞれの用途に合った使い方ができるように、これら二つの比較メソッドは覚えましょう。
- プログラマー
- Compareメソッド・EqualsメソッドはJavaなどの言語にもありますよね。
- プロジェクト
マネージャー - そうですね。これらは使い方を間違えやすいので、正しく覚えてくださいね。
文字列の「並び順」を比較するCompareメソッド
Compareメソッドは、文字列AとBの並び順を比較するメソッドで主にソートや条件分岐に使われます。
下記のサンプルコードをもとに解説します。
1
2
3
4
5
6
7
8
9
10
11
12
|
using System;
public class SampleClass
{
public CompareSample1()
{
String strA = "A";
String strB = "B";
Console.WriteLine(string.Compare(strA, strB));
}
}
|
1
|
-1
|
1
2
3
4
5
6
7
8
9
10
11
12
|
using System;
public class SampleClass
{
public CompareSample2()
{
String strA = "A";
String strB = "B";
Console.WriteLine(string.Compare(strA, strA));
}
}
|
1
|
0
|
1
2
3
4
5
6
7
8
9
10
11
12
|
using System;
public class SampleClass
{
public CompareSample3()
{
String strA = "A";
String strB = "B";
Console.WriteLine(string.Compare(strB, strA));
}
}
|
1
|
1
|
実行結果を見てわかるとおり、「Compareメソッド」では-1 / 0 / 1の数値が返ってきます。
- ・AがBよりも順番が前:-1
- ・AとBの値が同じ:0
- ・BがAよりも順番が後:1
先ほどのサンプルコードの場合、strAに「A」・strBに「B」が代入されています。
AはBよりも順番が前なので、上記のような実行結果になっています。
今回は簡単な例を挙げましたが、例えばstrAに「ABC」・strBに「abc」が代入されていた場合、順番は大文字→小文字になります。
※オプションで指定すれば“大文字・小文字の区別をなしにする”こともできます。
文字列「そのもの」を比較するEqualsメソッド
Equalsメソッドは、大文字・小文字も区別し「AとBが全く同じ文字列かどうか」を判定するメソッドです。
では、こちらもコードを見ながら使い方を確認していきましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
using System;
public class SampleClass
{
public EqualsSample4()
{
String strA = "あいうえお";
String strB = "あいうえお";
if (strA.Equals(strB))
{
Console.WriteLine("同じ");
} else
{
Console.WriteLine("違う");
}
}
}
|
1
|
同じ
|
至って簡単な例ですが、Equalsメソッドを用いて「strAとstrBが同じ値かどうか」を判定しています。
加えて、上記のコードの場合はstrAにもstrBにも同じ「あいうえお」が代入されているため、実行結果は“同じ”と出力されます。
Javaなどでは、よく※1同一性・※2同値性と言われ「==」よりもEqualメソッドを使うよう推奨されています。
しかしC#では、Stringの定義に「==」がオーバーライドされており、「==」でもEqualsメソッドと同じ効果が得られます。
※1同一性…変数の参照先が同じ
※2同値性…変数の値が同じ
ちなみに、もし大文字・小文字を区別したくない場合、下記のようにEqualsメソッドの引数の中に「StringComparison, OrdinalIgnoreCase」と記述すると、ABCとabcでも実行結果は“同じ”と出力されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
using System;
public class SampleClass
{
public EqualsSample()
{
String strA = "ABS";
String strB = "abc";
if (strA.Equals(strB, StringComparison, OriginalIgnoreCase))
{
Console.WriteLine("同じ");
} else
{
Console.WriteLine("違う");
}
}
}
|
1
|
違う
|
もちろん、大文字・小文字以外にも様々な指定ができるので興味がある方は色々試してみてください。
- プログラマー
- C#の文字列の比較のメソッド、よく分かりました!
- プロジェクト
マネージャー - C#のメソッドをマスターするには知識と実践が大事です!まずは演習問題などからチャレンジしてみましょう。
CompareメソッドとEqualsメソッドを使いこなそう
このように、「Compareメソッド」と「Equalsメソッド」の使い方は全く異なります。
特にCompareメソッドは、「どういう場合に-1でこのようなケースに1が返ってくるのか」など間違えやすいため、この機会に使いこなせるようにしましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)