文字列の操作 |
開発環境: Visual Studio 2003
目次 | |
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();
}
}
}
| |
| 文字列操作の実行結果 | |
左寄せ | |
改定記録 | |
| 2007/8/19 | 文字列のフォーマットへのリンクを追加。 |
| 2004/5/30 | 見た目の変更。 |
| 2003/3/30 | Stringの比較で <, > 演算子が使えるという間違いを修正。 |