2020年09月06日
川俣晶の縁側ソフトウェアC# コーディング How To total 396 count

【入門級】文字列中の1文字を2文字で置換する

Written By: 川俣 晶連絡先

できない文字の置き換え §

 ドイツ語のß(エスツェット)は表記できない場合ssに置き換えて表記されます。

 たとえば、Fußballという単語をFussballに置き換える例を考えてみましょう。

 通常文字の置換はString.Replace('?','?')のメソッドを使います。しかし、今回の場合はこれを使えません。1文字を1文字で置き換える場合にしか使えないからです。

 こういう場合は、同じReplaceメソッドでも文字列の置換のバリエーションString.Replace("???","???")を使ってしまえば上手く行きます。1文字を2文字に置き換える場合でも、文字列置換でオッケーです。

 しかしchar型の値をstring型の引数に渡すことはできません。その時は、ToStringメソッドを使えばその1文字を表す文字列を得られます。

罠の数々 §

  • カルチャに注意する。カルチャの指定次第では思いがけない文字を同一視してくれることがある。思い通りに変換されないときは、カルチャの指定をチェックすると良い
  • String.Replaceメソッドはとても簡単に利用できるメソッドなので、使える時はどんどん使うと良い。しかし、お手軽な反面制限は多いし、機能も限られている。十分ではないと思ったらすぐに他の方法を模索した方が良い
  • でも便利で手軽だからすぐに使ってしまうのが罠である
  • 文字型を文字列型に変換するのはToStringメソッド
  • 文字列型を文字型に変換するのは一般論としてはできない。先頭の1文字だけ取り出すのなら文字列[0]のように添え字に0を指定すると先頭の1文字が出てくる。LINQが使えるならFirst/FirstOrDefaultメソッドでも可

参考リンク §

String.Replace メソッド

Char.ToString メソッド

リポジトリ §

https://github.com/autumn009/cshowto

StringReplace §

using System;

using System.Text;

class Program

{

    static void Main()

    {

        var src = "Fußball";

        var targetChar = 'ß';

        Console.WriteLine("文字置換を試す (できない)");

        var dst1 = src.Replace(targetChar, '?');

        Console.WriteLine(dst1);

        Console.WriteLine("1文字単位で処理してみる");

        var dst2 = new StringBuilder();

        foreach (var item in src) dst2.Append(item == targetChar ? "ss" : item);

        Console.WriteLine(dst2);

        Console.WriteLine("1文字だけど文字列置換に切り換える");

        var dst3 = src.Replace(targetChar.ToString(), "ss");

        Console.WriteLine(dst3);

    }

}

実行結果

文字置換を試す (できない)

Fu?ball

1文字単位で処理してみる

Fussball

1文字だけど文字列置換に切り換える

Fussball

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?