プログラミング備忘録

アラフォーからソフトウェアエンジニアになるための備忘録

【C#】文字列の操作

今日の備忘録

 

C#プログラミングのイディオム/定石&パターン

Chapter5 文字列の操作

 

・+演算子での連結は、大量に行うとパフォーマンス低下につながる。

 文字列はイミュータブルなオブジェクトで、書き換えができない。

 そのため、連結や文字挿入、文字削除といった操作で、その都度インスタンス

 生成される。

 例えば文字列 s1 = "ABC" に "XYZ" を連結すると、 "ABC" の後ろに "XYZ" が

 連結されるのではなく、新たに6文字のインスタンスが生成される。

 

上記問題を解決するためには、StringBuilder クラスを使用する。

 var sb = new StringBuilder();

 foreach (var word in GetWords()){

        sb.Append.(word);

    }

    var text = sb.ToString();

 

・文字列の変換は、ToString メソッドで書式変換する方法もあるが、

 String.Format メソッドのほうがおすすめ。なぜなら、ToString には

    以下制限があるため。

 ・複数の変数をまとめて書式化できない

 ・最小桁数を指定することができない

       var number = 12345

  string.Format("{0, 10:#,0}, number); // 最小桁数10桁、カンマ付与

  var distance = 9876.123m;

       string.Format("{0, 10:0.0}", distance)/ // 最小桁数10桁  9876.5

 

・文字列は参照型だが、 ==演算子、 !=演算子オーバーロードされているため、

 文字列同士で比較が可能。

 

・問題5.4

   ひどいコードを書いてしまった。以下のような感じで、各文字列のインデックス

 を取得したが、冗長すぎる。

 

var text = "Novelist=谷崎潤一郎;BestWork=春琴;Born=1886";
var novelistValue = "Novelist=";
var novelistStartIndex = text.IndexOf(novelistValue) + novelistValue.Length;
var novelistEndIndex = text.IndexOf(";", novelistStartIndex);
var novelist = text.Substring(novelistStartIndex, novelistEndIndex - novelistStartIndex);

var bestWorkValue = "BestWork=";
var bestWorkStartIndex = text.IndexOf(bestWorkValue) + bestWorkValue.Length;
var bestWorkEndIndex = text.IndexOf(";", bestWorkStartIndex);
var bestWork = text.Substring(bestWorkStartIndex, bestWorkEndIndex - bestWorkStartIndex);

var bornValue = "Born=";
var bornStartIndex = text.IndexOf(bornValue) + bornValue.Length;
var bornEndIndex = text.Length;
var born = int.Parse(text.Substring(bornStartIndex, bornEndIndex - bornStartIndex));

 

    回答を見て納得。

 まず ';' でスプリット、次に '=' でスプリットすれば、Key と Value

    含む配列ができる。それを表示すればよいだけ。

    Key は Novelist 等の英語なので、

 日本語化する関数を用意。 

はじめに

アラフォーから本格的にソフトウェアエンジニアを目指します。

IT業界にはそれなりの年数浸ってますが、ソフトウェア開発は未経験。

 

■勉強内容

★技術

C#

ASP.NET

HTML5/CSS3/JavaScript

 

★勉強中書籍

C#プログラミングのイディオム/定石&パターン

・チーム開発の教科書