前回
文字列の操作や判定
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
などがある。
パラグラムって同じ文字複数回含んでてもいいんだ。
- 比較
- 判定
- 文字列の取り出し(Substring)
- 消去(Trim,Remove)
- 挿入(Insert)
- 置き換え(Replace)
- 大文字小文字変換
- 連結
- StringBuilder
- 1文字ずつ取り出す(foreach)
- 数値を文字列(ToString)
- 文字列を数値
- 整形(Format)
- 次回
比較
大文字小文字の大小なく区別する
カタカナひらがなの区別なく
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);
範囲を指定しての置き換えはstringのreplaceじゃなくてStringBuilderのreplace
StringBuilder sb = new StringBuilder(str);
sb.Replace("dog", "fox", 15, 20);
2個目の数字は部分文字列の長さ。15~20文字目じゃなくて15~(15+20)文字目までの間を変換する。
大文字小文字変換
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('・')
配列から文字列生成は
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
文字列を数値
int num;
if (int.TryParse(str, out num)) {
これでboolになるの?intだったらってこと
数値の文字列形式を、それと等価な 32 ビット符号付き整数に変換します。 戻り値は、変換が成功したかどうかを示します。
整形(Format)
string.Format
article =12;
clause = 5;
String.Format("第{0,2}条{1,2}項",article,clause);
12条 5項が入るらしい。
2ってなんだ??って思ったけどよく見たら5が2文字になっている。
12条_5項
次回
次回は6章じゃなくて、10章の「正規表現を使った高度な文字処理列」に行こうかな?ちょうど実務で???しながらやったので