2020年10月24日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 767 count

【入門級】文字列中のAをBに、BをAに置き換える

Written By: 川俣 晶連絡先

文字の入れ替えは面倒 §

 "たろうくんの英語はA、国語はB"という文字列で、あとからAとBが反対であると発覚したとします。文字を置き換えるプログラムは簡単に書けるでしょうか。

 s.Replace('A', 'B').Replace('B', 'A')はダメな例です。Replace('A', 'B')を実行した時点で全てのAはBになってしまい、BはBのままですから区別できなくなります。そして、Replace('B', 'A')で全てAに置き換えられます。

 s.Replace('A', '\0').Replace('B', 'A').Replace('\0', 'B');は良い例です。\0は通常使用しない文字です。一時的にAをそれに置き換え、BをAに置き換えた後でBに置き換えています。

 しかし、【一時的に使用して良い文字】がない場合は、コツコツと地道に置き換えていくしかありません。サンプルソースのforeachを使った処理は一例です。他の方法でも構いません。

罠の数々 §

  • '\0'は2文字ではない。円記号(バックスラッシュ)を前置するのは、特殊文字を表記する方法。

参考リンク §

String.Replace メソッド

 String.Replace メソッドには、他にもいろいろなバリエーションがある。もし、"たろうくんの英語はA、国語はB"の【たろうくん】を【はなこさん】に置き換えるとしたら、どのバリエーションを使えば効率が良いか、上記のリンクから辿って考えてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

SwapChar §

using System;

using System.Text;

class Program

{

    static void Main()

    {

        var s = "たろうくんの英語はA、国語はB";

        var bad = s.Replace('A', 'B').Replace('B', 'A');

        Console.WriteLine($"ダメなケース {bad}");

        var good1 = s.Replace('A', '\0').Replace('B', 'A').Replace('\0', 'B');

        Console.WriteLine($"良いケース1 {good1}");

        var good2 = new StringBuilder();

        foreach (var item in s) good2.Append(item switch { 'A' => 'B', 'B' => 'A', _ => item });

        Console.WriteLine($"良いケース2 {good2.ToString()}");

    }

}

実行結果

ダメなケース たろうくんの英語はA、国語はA

良いケース1 たろうくんの英語はB、国語はA

良いケース2 たろうくんの英語はB、国語はA

Facebook

COOL C# CREW

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

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
10月
25日
【入門級】文字列定数の3つの書き方を比較する
3days 0 count
total 956 count
【C# コーディング How To】の前のコンテンツ
2020年
10月
23日
【入門級】foreachで数値をカウントする方法
3days 0 count
total 1409 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201024092425
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.