できない文字の置き換え §
ドイツ語のß(エスツェット)は表記できない場合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