C# Programming

Note

文字列の操作

開発環境: Visual Studio 2003 

目次

  1. 目次
  2. string の基礎知識
    1. string キーワード
    2. Reference Type
    3. string インスタンスそのものは変更不可能。
    4. string のエンコーディング
    5. 高速な文字処理を行いたい。
  3. 文字列の整形
    1. 文字列をフォーマットしたい。
    2. 文字列を桁数を指定してフォーマットしたい。
    3. 文字列を左寄せにする。
    4. 文字列を右寄せにする。
    5. 文字列を大文字に変換したい。
    6. 文字列を小文字に変換したい。
  4. 文字列から文字の取り出し
    1. 文字列から文字を取り出したい。
  5. 文字列の比較
    1. ==、!= String 演算子による比較ができます。
    2. String.Compare スタティックメソッド
    3. String.Equals スタティックメソッド
    4. CompareToインスタンスメソッド
    5. 文字列の最初が一致しているか
    6. 文字列の最後が一致しているか
  6. 文字列のコピー
    1. 文字列を別の文字列にコピーしたい。
    2. 文字列を char 配列にコピーしたい。
  7. 文字列を結合をしたい。
    1. 文字列の結合
  8. 文字列の挿入
    1. 文字列の指定した場所にある文字列を挿入したい。
  9. 文字列の検索
    1. 文字列の中からある文字列の場所を見つけたい。
  10. 文字列の置換
    1. 文字列を置換したい。
    2. 文字列を特定のキャラクターで分割したい。
  11. 空白文字の削除
    1. 文字列の先頭と末尾の空白文字を取り除きたい。
    2. 文字列の先頭から空白文字を取り除きたい。
    3. 文字列の最後から空白文字を取り除きたい。
    4. trim の注意
  12. サブストリング
    1. 文字列の一部をサブストリングとして切り出したい。
  13. 文字列の一部削除
    1. 文字列の一部を削除したい。
  14. ユニコードの直接入力
    1. ユニコードを直接入力したい。
  15. 文字列操作のサンプルコード
  16. 改定記録

string の基礎知識

string キーワード

System.String のエイリアスです。

Reference Type

string はリファレンスタイプです。

string インスタンスそのものは変更不可能。


System.Text.StringBuilderクラスを使用します。
string インスタンスに対する操作は、別のインスタンスを返しています。
つまり、
string str = "aaa";
str += "bbb";
とした場合、文字列 str "aaabbb" は、"aaa" とは別のインスタンスになります。
このため、大量の文字列の操作を行う場合には、インスタンスの生成、消滅が頻繁に発生し、遅くなります。

string のエンコーディング

string 型は、Unicode 文字列を表します。

高速な文字処理を行いたい。

System.Text.StringBuilderクラスを使用します。

文字列の整形

文字列をフォーマットしたい。

文字列のフォーマットを参照してください。

文字列を桁数を指定してフォーマットしたい。

文字列のフォーマットを参照してください。

文字列を左寄せにする。

string PadLeft( int 文字列数 );
string PadLeft( int 文字列数, char 埋め込むUnicode文字);
指定した文字数になるまで空白を埋め込みます。

文字列を右寄せにする。

string PadRight( int 文字列数 );
string PadRight( int 文字列数, char 埋め込むUnicode文字);
指定した文字数になるまで空白を埋め込みます。

文字列を大文字に変換したい。

string ToUpper();
string ToUpper(CultureInfo);
日本語には影響しない。

文字列を小文字に変換したい。

string ToLower();
string ToLower(CultureInfo);
日本語には影響しない。

文字列から文字の取り出し

文字列から文字を取り出したい。

char x = "test"[2];

文字列の比較

==、!= String 演算子による比較ができます。

if ( str1 == str2 ) ....
if ( str1 != str2 ) ....

String.Compare スタティックメソッド

int result = String.Compare( str1, str2 );

String.Equals スタティックメソッド

bool result = String.Equals( str1, str2 );

CompareToインスタンスメソッド

int result = str1.CompareTo( str2 );
str1, str2 ともにnull の場合でも一致(0 なので注意。

文字列の最初が一致しているか

bool result = str1.StartsWith( str2 );

文字列の最後が一致しているか

bool result = str1.EndsWith( str2 );

文字列のコピー

文字列を別の文字列にコピーしたい。

string str1 = "Hello"; // "Hello"とは別のインスタンスを返しています。
string str2 = str1;
string str2 = String.Copy( "HelloWorld" );
"HelloWorld"とは別のインスタンスを返しています。

文字列を char 配列にコピーしたい。

char[] charArray = new char[jstr1.Length];
jstr1.CopyTo(0, charArray, 0, jstr1.Length);
for(int i = 0; i < jstr1.Length; i++)
{
Console.WriteLine( "charArray[{0}] = {1}", i, charArray[i]);
}

文字列を結合をしたい。

文字列の結合

string str = "Hello" + "World";
string str = "Hello";
str += "World";
string str = String.Concat( "Hello", "World" );

文字列の挿入

文字列の指定した場所にある文字列を挿入したい。

string str1 = "Hello!";
str1.Insert( 5, "World");

文字列の検索

文字列の中からある文字列の場所を見つけたい。

int 開始位置 = str1.IndexOf( "見つけたい文字列" );
これ以外にも char, char[], 検出開始位置、終了位置などを指定することができる。

文字列の置換

文字列を置換したい。

"こんにちは".Replace("にち", "ち")) → "こんちは"

文字列を特定のキャラクターで分割したい。

string testString = "Hello World,This is a test";
char[] separator = {' ', ','};
string[] result;
result = testString.Split(separator, 10));

空白文字の削除

文字列の先頭と末尾の空白文字を取り除きたい。

str1.Trim();

文字列の先頭から空白文字を取り除きたい。

str1.TrimStart();

文字列の最後から空白文字を取り除きたい。

str1.TrimEnd();

trim の注意

空白文字は  0x9、0xA、0xB、0xC、0xD、0x20、0xA0、0x2000、0x2001、0x2002、0x2003、0x2004、0x2005、0x2006、0x2007、0x2008、0x2009、0x200A、0x200B、0x3000、0xFEFF です。

サブストリング

文字列の一部をサブストリングとして切り出したい。

こんにちは.Substring(1, 3)  → んにち

文字列の一部削除

文字列の一部を削除したい。

"こんにちは".Remove(2, 1) → "こんちは"
3番目の"に" が削除される。

ユニコードの直接入力

ユニコードを直接入力したい。

ユニコードのエスケープ コード
   \udddd (dddd は 4 桁の数字)  Unicode 文字 U + dddd
   \Udddddddd  (dddddddd は 8 桁の数字)  Unicode 文字 U + dddddddd

文字列操作のサンプルコード


using System;

namespace Strings1
{
        /// <summary>
        /// Class1 の概要の説明です。
        /// </summary>
        class Class1
        {
                /// <summary>
                /// アプリケーションのメイン エントリ ポイントです。
                /// </summary>
                [STAThread]
                static void Main(string[] args)
                {
                        string jstr1 = "こんにちは";
                        string jstr2 = "世界";
                        
                        string jstr3 = "こんにちあ";
                        string jstr4 = "こんにちは";
                        string jstr5 = "こんにちひ";

                        string estr1 = "Hello";
                        string estr2 = "World";

                        Console.WriteLine( "\n左寄せ" );
                        Console.WriteLine( "PadLeft():>>>{0}<<<", jstr1.PadLeft(10, '-') );
                        Console.WriteLine( "PadLeft():>>>{0}<<<", estr1.PadLeft(10) );

                        Console.WriteLine( "\n右寄せ" );
                        Console.WriteLine( "PadRight():>>>{0}<<<", jstr1.PadRight(10, '-') );
                        Console.WriteLine( "PadRight():>>>{0}<<<", estr1.PadRight(10) );

                        Console.WriteLine( "\n大文字へ" );
                        Console.WriteLine( "ToUpper():>>>{0}<<<", jstr1.ToUpper() );
                        Console.WriteLine( "ToUpper():>>>{0}<<<", estr1.ToUpper() );

                        Console.WriteLine( "\n小文字へ" );
                        Console.WriteLine( "ToLower():>>>{0}<<<", jstr1.ToLower() );
                        Console.WriteLine( "ToLower():>>>{0}<<<", estr1.ToLower() );

                        Console.WriteLine( "\nインデクサ" );
                        for(int i = 0; i < jstr1.Length; i++)
                        {
                                Console.WriteLine( "jstr1[{0}] = {1}", i, jstr1[i]);
                        }

                        Console.WriteLine( "\nCompare" );
                        Console.WriteLine( "Compare:{0} and {1} = {2}", jstr1, jstr3, String.Compare(jstr1, jstr3));
                        Console.WriteLine( "Compare:{0} and {1} = {2}", jstr1, jstr4, String.Compare(jstr1, jstr4));
                        Console.WriteLine( "Compare:{0} and {1} = {2}", jstr1, jstr5, String.Compare(jstr1, jstr5));
                        
                        Console.WriteLine( "\nCompareTo" );
                        Console.WriteLine( "CompareTo:{0} and {1} = {2}", jstr1, jstr3, jstr1.CompareTo(jstr3));
                        Console.WriteLine( "CompareTo:{0} and {1} = {2}", jstr1, jstr4, jstr1.CompareTo(jstr4));
                        Console.WriteLine( "CompareTo:{0} and {1} = {2}", jstr1, jstr5, jstr1.CompareTo(jstr5));

                        Console.WriteLine( "\nEquals" );
                        Console.WriteLine( "Equals:{0} and {1} = {2}", jstr1, jstr3, jstr1.Equals(jstr3));
                        Console.WriteLine( "Equals:{0} and {1} = {2}", jstr1, jstr4, jstr1.Equals(jstr4));

                        Console.WriteLine( "\nStartsWith" );
                        Console.WriteLine( "StartsWith:{0} and {1} = {2}", jstr1, "こん", jstr1.StartsWith("こん"));
                        Console.WriteLine( "StartsWith:{0} and {1} = {2}", jstr1, "んこ", jstr1.StartsWith("んこ"));

                        Console.WriteLine( "\nEndsWith" );
                        Console.WriteLine( "EndsWith:{0} and {1} = {2}", jstr1, "ちは", jstr1.EndsWith("ちは"));
                        Console.WriteLine( "EndsWith:{0} and {1} = {2}", jstr1, "はち", jstr1.EndsWith("はち"));

                        
                        Console.WriteLine( "\nCopyTo" );
                        char[] charArray = new char[jstr1.Length];
                        jstr1.CopyTo(0, charArray, 0, jstr1.Length);
                        for(int i = 0; i < jstr1.Length; i++)
                        {
                                Console.WriteLine( "charArray[{0}] = {1}", i, charArray[i]);
                        }

                        Console.WriteLine( "\nConcat" );
                        Console.WriteLine( "Concat:{0}, {1}, {2}, {3} = {4}", jstr1, jstr2, estr1, estr2, String.Concat(jstr1, jstr2, estr1, estr2));
                        
                        Console.WriteLine( "\nInsert" );
                        Console.WriteLine( "Insert:{0}, {1} = {2}", jstr1, estr1, jstr1.Insert(3, estr1));

                        Console.WriteLine( "\nIndexOf" );
                        Console.WriteLine( "IndexOf:{0}, {1} = {2}", jstr1, "にち", jstr1.IndexOf("にち"));

                        Console.WriteLine( "\nReplace" );
                        Console.WriteLine( "Replace:{0}, {1} = {2}", jstr1, "にち→ち", jstr1.Replace("にち", "ち"));

                {
                        Console.WriteLine( "\nSplit" );
                        string testString = "Hello World,This is a test";
                        char[] separator = {' ', ','};
                        string[] result;
                        Console.WriteLine( "Split:{0}, {1} = {2}", jstr1, testString, result = testString.Split(separator, 10));
                        int i = 0;
                        foreach(string str in result)
                        {
                                Console.WriteLine( "splitted[{0}] = {1}", i++, str);
                        }
                }
                        
                        Console.WriteLine( "\nTrim" );
                        string trim1 = "\n\t    Hello World こんにちは 世界 \n\t";
                        char[] trimChar = {' ', '\t', '\n', ' '};
                        Console.WriteLine( "Trim:>>>{0}<<<\n>>>{1}<<<", trim1, trim1.Trim());
                        Console.WriteLine( "\nTrim:>>>{0}<<<\n>>>{1}<<<", trim1, trim1.Trim(trimChar));
                        Console.WriteLine( "\nTrimStart:>>>{0}<<<\n>>>{1}<<<", trim1, trim1.TrimStart(trimChar));
                        Console.WriteLine( "\nTrimEnd:>>>{0}<<<\n>>>{1}<<<", trim1, trim1.TrimEnd(trimChar));
                        
                        Console.WriteLine( "\nSubstring" );
                        Console.WriteLine( "{0}.Substring(1, 3) = {1}", jstr1, jstr1.Substring(1, 3));
                        
                        Console.WriteLine( "\nRemove" );
                        Console.WriteLine( "{0}.Remove(2, 1) = {1}", jstr1, jstr1.Remove(2, 1));

                        Console.ReadLine();
                }
        }
}
文字列操作の実行結果
左寄せ
PadLeft():>>>-----こんにちは<<<
PadLeft():>>> Hello<<<

右寄せ
PadRight():>>>こんにちは-----<<<
PadRight():>>>Hello <<<

大文字へ
ToUpper():>>>こんにちは<<<
ToUpper():>>>HELLO<<<

小文字へ
ToLower():>>>こんにちは<<<
ToLower():>>>hello<<<

インデクサ
jstr1[0] = こ
jstr1[1] = ん
jstr1[2] = に
jstr1[3] = ち
jstr1[4] = は

Compare
Compare:こんにちは and こんにちあ = 1
Compare:こんにちは and こんにちは = 0
Compare:こんにちは and こんにちひ = -1

CompareTo
CompareTo:こんにちは and こんにちあ = 1
CompareTo:こんにちは and こんにちは = 0
CompareTo:こんにちは and こんにちひ = -1

Equals
Equals:こんにちは and こんにちあ = False
Equals:こんにちは and こんにちは = True

StartsWith
StartsWith:こんにちは and こん = True
StartsWith:こんにちは and んこ = False

EndsWith
EndsWith:こんにちは and ちは = True
EndsWith:こんにちは and はち = False

CopyTo
charArray[0] = こ
charArray[1] = ん
charArray[2] = に
charArray[3] = ち
charArray[4] = は

Concat
Concat:こんにちは, 世界, Hello, World = こんにちは世界HelloWorld

Insert
Insert:こんにちは, Hello = こんにHelloちは

IndexOf
IndexOf:こんにちは, にち = 2

Replace
Replace:こんにちは, にち→ち = こんちは

Split
Split:こんにちは, Hello World,This is a test = System.String[]
splitted[0] = Hello
splitted[1] = World
splitted[2] = This
splitted[3] = is
splitted[4] = a
splitted[5] = test

Trim
Trim:>>>
Hello World こんにちは 世界 
<<<
>>>Hello World こんにちは 世界<<<

Trim:>>>
Hello World こんにちは 世界 
<<<
>>>Hello World こんにちは 世界<<<

TrimStart:>>>
Hello World こんにちは 世界 
<<<
>>>Hello World こんにちは 世界 
<<<

TrimEnd:>>>
Hello World こんにちは 世界 
<<<
>>>
Hello World こんにちは 世界<<<

Substring
こんにちは.Substring(1, 3) = んにち

Remove
こんにちは.Remove(2, 1) = こんちは

改定記録

2007/8/19 文字列のフォーマットへのリンクを追加。
2004/5/30 見た目の変更。
2003/3/30 Stringの比較で <, > 演算子が使えるという間違いを修正。