c#では全く同じ文字配列の場合、コンパイラはそれらをすべて同じ場所に保管し参照を同一にします
これを文字列インターン機能と呼びます。インターンを避けるためにはString.Copyメソッドを利用します

  • 文字を数字に変換
  • 文字列をリバースする関数
  • ストリングビルダー
  • 文字列を分割してキーワードのみを取り出す
  • 文字をオブジェクトとして扱い同一性を確認
  • 文字の比較(StringComparison列挙体の使用例)
  • LINQを使用しないソートやサーチの例


string n="123";
employeeCounter = Int32.Parse(n);   //文字を数字に変換


class StringTest
   {
       //文字列をリバースする関数
       string StringReverse(string str)
       {
           string reverse="";
           for (int i = 0; i < str.Length; i++)
           {
               reverse += str[str.Length - i - 1];
           }
           return reverse;
       }

       public StringTest()
       {
           string soft = "Panzer Dragoon ORTA";
           Console.WriteLine(soft.Replace("ORTA", "AZEL"));
           Console.WriteLine(soft.ToUpper());
           Console.WriteLine(soft.ToLower());
           Console.WriteLine(soft);                    //事前のstringクラスのメソッドは内容を書き換えていない事に注目。あくまで戻り値

           Console.WriteLine(StringReverse(soft));

           StringBuilder sb = new StringBuilder("Rat Dog Fox");    //ストリングビルダーは関数機能が少ないが高速に文字列を加工できる
           sb.Append(" Cow");
           sb[0] = 'C';
           Console.WriteLine(sb);

           //文字列を分割してキーワードのみを取り出す
           char[] delimiterChars = { ' ', ',', '.', ':', ';', '\t', '\n', '\r' };
           string sampleText = "one\ttwo      three:four,  five six  \tseven";

           Console.WriteLine("Original: " + sampleText);
           var words = sampleText.Split(delimiterChars).Where(s => s != "");
           Console.WriteLine("Keyword in text: "+words.Count());
           foreach (var item in words)
           {
               Console.WriteLine(item);
           }
       }
   }
出力はこうなる
Panzer Dragoon AZEL
PANZER DRAGOON ORTA
panzer dragoon orta
Panzer Dragoon ORTA
ATRO noogarD reznaP
Cat Dog Fox Cow
Original: one	two      three:four,  five six  	seven
Keyword in text: 7
one
two
three
four
five
six
seven

文字列を比較するサンプル
class StringTest2
   {
       public StringTest2()
       {
           //c#では全く同じ文字配列の場合、コンパイラはそれらをすべて同じ場所に保管し参照を同一にします
           //これを文字列インターン機能と呼びます。インターンを避けるためにはString.Copyメソッドを利用します
           string str = @"C:\users";
           string str2 = @"C:\users";
           string str3 = @"C:\Users";
           string str4 = string.Copy(str);

           Console.WriteLine(ReferenceEquals(str, str2));  //オブジェクトとして同一
           Console.WriteLine(ReferenceEquals(str, str4));  //オブジェクトとして同一ではない
           Console.WriteLine(str.Equals(str3));
           Console.WriteLine(str.Equals(str3,StringComparison.OrdinalIgnoreCase)); //大文字小文字の区別無しに識別

           //LINQを使用しないソートやサーチの例
           string[] lines = new string[]
           {
               @"c:\public\textfile.txt",
               @"c:\public\textFile.TXT",
               @"c:\public\Text.txt",
               @"c:\public\testfile2.txt"
           };

           Array.Sort(lines, StringComparer.Ordinal);
           foreach (var item in lines)
           {
               Console.WriteLine(item);
           }

           string searchString = @"c:\public\TEXTFILE.TXT";
           int index = Array.BinarySearch(lines, searchString, StringComparer.OrdinalIgnoreCase);
           Console.WriteLine("index={0} : Find is {1}", index, lines[index]);
       }
   }
最終更新:2012年06月04日 00:52