トマシープが学ぶ

Unity/VR好きのミーハー初心者 記事内容は自分用のメモ。何も求めないで

C#の本をやる:文字列(Chapter5)

 前回

bibinbaleo.hatenablog.com

 

文字列の操作や判定

string str = "The quick br!wn dog jumps over the lazy cat.";

という例文は有名みたい。パラグラム。

ほかにも

The quick brown fox jumps over the lazy dog

Jackdaws love my big sphinx of quartz

などがある。

ja.wikipedia.org

パラグラムって同じ文字複数回含んでてもいいんだ。

比較

大文字小文字の大小なく区別する

           var str1 = "Windows";
            var str2 = "WIndOws";
            if (String.Compare(str1, str2, true) == 0)
                Console.WriteLine("等しい");
            else
                Console.WriteLine("等しくない");

            Console.ReadKey();

 

カタカナひらがなの区別なく

using System.Globalization;

var cultureinfo = new CultureInfo("ja-JP");
if (String.Compare(str1, str2, cultureinfo,CompareOptions.IgnoreKanaType) == 0)
Console.WriteLine("等しい");

 

CompareOptions.IgnoreWidth

だと全角半角の区別を無視

判定

nullあるいは空文字かを調べる

if(String.Empty(str))  ""

String.IsNullOrEmpty  "",null

String.IsNullOrWhiteSpace  "  " ,"" ,null

 

StartWith("Tomato")

EndWith("Tomato")

Contains("Tomato")

ラムダ式での条件判定

一つでも小文字を含んでいるか?

var isExists = target.Any(c => Char.IsLower(c));

すべて数字か?

var isAllDigits = target.All(c => Char.IsDigit(c));

文字列の取り出し(Substring)

・文字列の始まった位置を返す

IndexOf("")

・文字を抜き出す

target.Substring(startindex,endIndex - startIndex)

応用したらSubstringで最後の一文字を消せる

text =text.Substring(0, text.Length - 1);

消去(Trim,Remove)

・自身の前後の空白を取り除く

target = target.Trim()

文字列の最初を取り除く chara

target = target.TrimStart()

文字列の最後を取り除く

target = target.TrimEnd()

 

Trimの中身はcharなのでstringを消すにはstr.ToCharArray()で変換してから

 

・文字列中の任意の文字を消す

target = target.Remove(5,3)

挿入(Insert)

target = target.Insert(5,"abc")

置き換え(Replace)

charaでもstringでもいい

str.Replace(KanaStr, KangiStr);

dobon.net

範囲を指定しての置き換えはstringのreplaceじゃなくてStringBuilderのreplace

StringBuilder sb = new StringBuilder(str);

sb.Replace("dog", "fox", 15, 20);

2個目の数字は部分文字列の長さ。15~20文字目じゃなくて15~(15+20)文字目までの間を変換する。

docs.microsoft.com

gihyo.jp

大文字小文字変換

ToUpper()

ToLower()

連結

var name = "トマシープ"

name += "先生"

 

区切り記号で配列を連結

String.Join Method (System) | Microsoft Docs

var Language = new {"お粗末","カラマツ","十姉妹"}

var separator = "・";

var Result = String.Join(separator,Matsu)

お粗末・カラマツ・十姉妹

 

StringBuilderを使い配列を空白区切り入れて結合

if (array.Length > 0) {
var sb = new StringBuilder(array[0]);
foreach (var word in array.Skip(1)) {
sb.Append(' ');
sb.Append(word);
}

指定した文字で分割するして配列に入れる(Split)

text = "お粗末・カラマツ・十姉妹"

string words=text.Split('・')

docs.microsoft.com

配列から文字列生成は

var chars = new char[]{ 't' , 'm' , 't' };

var str = new string(chars)

もしくはToArray()

var array = text.Split(' ').ToArray();

 

StringBuilder

stringは不変文字

動的なことをするにはStringBuilderのほうがメモリ的にいいらしい。

StringBuilder sb = new StringBuilder(200);

200文字分の領域が確保される。

でもstringbuilderはコード量が増えるし見にくいからstringでもいい

1文字ずつ取り出す(foreach)

foreach(var c in str )

数値を文字列(ToString)

#,0などで表示を操作

(12345).ToString(#,0)  /// 12,345  

dobon.net

文字列を数値

int num;
if (int.TryParse(str, out num)) {

これでboolになるの?intだったらってこと

数値の文字列形式を、それと等価な 32 ビット符号付き整数に変換します。 戻り値は、変換が成功したかどうかを示します。

整形(Format)

string.Format

docs.microsoft.com

article =12;

clause = 5;

String.Format("第{0,2}条{1,2}項",article,clause);

12条 5項が入るらしい。

2ってなんだ??って思ったけどよく見たら5が2文字になっている。

12条_5項

 

次回

次回は6章じゃなくて、10章の「正規表現を使った高度な文字処理列」に行こうかな?ちょうど実務で???しながらやったので

実戦で役立つ C#プログラミングのイディオム/定石&パターン