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

【入門級】文字列の中の1文字は読み出せるのに書き換えられない

Written By: 川俣 晶連絡先

文字列から文字を扱う手段の非対称性 §

 文字列から5番目の文字を取り出すのはs[4]だけでオッケーです。(0から数えるので、5ン番目は4になります)

 文字列は配列ではありませんが、配列のように文字を取り出すインデクサが定義されています。

 しかし、5番目の文字を書き換えるために、s[4]='X'とは書けません。

 文字列は書き換えることが許されていないからです。

 特定の文字を置き換えた文字列が欲しいなら、s.Substring(0, 4) + "4" + s.Substring(5);のように地道に連結して新しい文字列を作らねばなりません。

 ちなみに、Replaceメソッドは指定の文字を全て置き換えてしまうので、位置指定の置き換えとは機能性がちょっと違います。

罠の数々 §

  • C#では、文字列を書き換えることは許可されていないが、文字列型変数を書き換えることは許されている。この違いをはっきりと理解しておこう。(サンプルソースでも文字列型変数を書き換えている)

参考リンク §

String.Chars[Int32] プロパティ

 とても分かりにくいが、文字列から1文字を取り出すインデクサの定義はドキュメントのサイトでは【String.Chars[Int32] プロパティ】に記載されている。上記のリンクから、本当にここにインデクサの情報が書かれていることを確認してみよう。

 ついでに、なぜ読み出しはできるのに書き込みはできないのか。その理由を上記リンク先のページから確認してみよう。

 ちなみに、Charsはインデクサのないプログラミング言語から使うときの名前である。C#プログラマが使うことはない名前である。

リポジトリ §

https://github.com/autumn009/cshowto

ReplaceChar §

using System;

class Program

{

    static void Main()

    {

        var s = "斉藤家の3男";

        Console.WriteLine($"元文字列: {s}");

        Console.WriteLine($"何人目の男の子? {s[4]}");

        s = s.Substring(0, 4) + "4" + s.Substring(5);

        Console.WriteLine($"3→4修正後: {s}");

    }

}

実行結果

元文字列: 斉藤家の3男

何人目の男の子? 3

3→4修正後: 斉藤家の4男

Facebook

COOL C# CREW

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

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
29日
【入門級】文字は必ず幅を持っているわけではない
3days 0 count
total 942 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
27日
【入門級】数字の文字コードは値の順に並んでいる
3days 0 count
total 883 count

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

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

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

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

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

https://mag.autumn.org/tb.aspx/20200928094541
サイトの表紙【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.