본문 바로가기

Programming/C#/Xna/Kinect/WPF

[C#] String Split (Unity3D)

string a = "文字列A";
string b;

b = a.Substring(「開始位置」,「取り出す文字数」);
開始位置は0から始まる
全角も1文字として数えられます

b = a.Substring(0, 2);	//先頭から2文字→文字
b = a.Substring(1, 2);	//2文字目から3文字→字列
b = a.Substring(1);	//3文字目以降全部→字列A

●特定の文字列で分割

string a = "文字列A\n文字列B";
string[] b;
string c;

b = a.Split("\n"[0]);	//改行コードで分割
c = b[0];	//cには『文字列A』が入る

区切り文字を複数にしたい場合は,配列にすれば可能です
string a = "文字列A\n文字列B";
string[] b;
string c;
string[] KUGIRI = {"\r", "\n"};	//データの区切り文字

b = a.Split(KUGIRI);	//KUGIRI変数内の各文字で分割
c = b[0];	//cには『文字列A』が入る

○空白だけの項目は削除したい場合
Splitには実は第2引数があり,そこに System.StringSplitOptions.RemoveEmptyEntriesを指定すると,分割した後中身の無い変数は削除されます
string a = "文字列A\n\n\n文字列B";	//間に改行が3つある
string[] b;
string c;

b = a.Split("\n"[0], System.StringSplitOptions.RemoveEmptyEntries);	//改行コードで分割。空欄は削除する
//b[0]には『文字列A』
//b[1]には『文字列B』
//が入る

●文字列比較

原則として ==で比較します
string a="文字列A";

if(a == "文字列A"){
	//一致した
}else{
	//一致しなかった
}
・うまく比較できない場合はEqualsメソッドを使う
string a="文字列A";

if(a.Equals("文字列A")){
	//一致した
}else{
	//一致しなかった
}
・宣言をしただけの変数との比較はできません
string a;

if (a == null) {	//x
}
↓こういうエラーが出ます
error CS0165: Use of unassigned local variable `a'

if文を使用する変数は,必ず定義されていなければなりません
されない場合がある。というのもダメです
string a;
int b=1;

if (b == 1) {
	a = "初期化";
}
if (a == null) {
	Debug.Log("true");
}
※bが1でない場合が発生するかも知れないのでエラーになります

・nullの状態
何も入っていない状態が nullなのでは無くて,nullも代入できるという事です
string a=null;

●数値を文字列に代入

・整数
int a = 123;
string b;

b = "" + a;

・少数
float a = 123.45f;
string b;

b = "" + a;

●文字を数値に代入

・整数の場合
string a = "123";
int b;

try{
	b = int.Parse(a);
}catch{
	//エラー時:文字列が整数で無い時(少数の時もエラーになる)
}
変換できない文字列の場合は以下のエラーになります
NullReferenceException: Object reference not set to an instance of an object

・少数の場合
string a = "123.45";
float b;

try{
	b = float.Parse(a);
}catch{
	//エラー時:文字列が少数で無い時
}

○例外を発生させたくない場合はTryParseメソッドを使う
・整数の場合
string a = "123";
int b;

if(int.TryParse(a, out b)){
	//正常の時
	//bに結果の123が入っている
}else{
	//エラー時:文字列が整数で無い時(少数の時もエラーになる)
	//bには常に0が入っている
}

・少数の場合
string a = "123.45";
float b;

if(float.TryParse(a, out b)){
	//正常の時
	//bに結果の123.45が入っている
}else{
	//エラー時:文字列が少数で無い時
	//bには常に0が入っている
}

●文字列検索

string a = "文字列A\n文字列B";
int b;

b = a.IndexOf('\n');

先頭を 0とした,最初に発見した文字数が入ります
この場合は b=4です

文字が発見できなかった場合は,-1が入ります
if (a.IndexOf('\n') == -1) {
	//文字列が無かった
} else {
	//文字列があった
}

●switch~case文

string word="春";

switch(word){
case "春":
case "夏":
case "秋":
case "冬":
    //春夏秋冬のどれかだった場合
    break;
default:
    //それ以外
    break;    //省略不可
}

※最後のbreakは省略できません。書き忘れると以下のエラーが出ます
error CS0163: Control cannot fall through from one case label to another

●デバッグ出力

string debug = "デバッグ文字列";
Debug.Log(debug);
※Consoleウィンドウは,メニューの Window→Consoleで表示されます