質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1361閲覧

StringのReplaceをしようして一部の文字を変更する

SaharaDesert

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/01/29 07:19

編集2019/01/29 07:44

string s = "ああうあお";

上の変数の2つ目をReplaceを使用して「い」に変更したいのですが、1つ目も変わってしまいます。
2つ目だけ変更することは、可能なのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/01/29 07:23

2つ目以降の「あ」をreplaceで変更するという意味ですか?それとも2つ目以降は全て「い」ですか?こういう教室課題ではなく、ホントにやりたいことの仕様を書くことをおすすめします(回答が役にたたない可能性が高いです、teratailでの経験から)
azuapricot

2019/01/29 07:25

2つめ以降なのか2つ目だけなのかはっきりしましょう
SaharaDesert

2019/01/29 07:45

修正いたしました。 よろしくお願いいたします。
papinianus

2019/01/29 07:45

2つ目以降とのコメントなのに「2つ目」に変更しましたが、どういう意図ですか?
Zuishin

2019/01/29 07:49

二つ目なのか二文字目なのかでも変わってきますね。 "いああ" の二つ目の "あ" を "い" に変更した場合は "いあい" に、先頭から二文字目の "あ" を "い" に変更した場合 "いいあ" になります。
SaharaDesert

2019/01/29 07:57

自分のやりたいことが、2つ目だったので変えさせていただきました。 すみませんが、変更したものでもう一度教えていただきますでしょうか。
pontaq

2019/01/29 07:58

ひとつの文字列の中の重複部分を別のものに置き換えたい(重複部分の位置はわかっていない)、が質問の正解なんじゃないでしょうか
Zuishin

2019/01/29 08:00

文があいまいで複数の意味にとれます。どのような文字列をどのように変えたいかサンプルを(できれば複数)提示してください。
SaharaDesert

2019/01/29 08:04

結果的には、string s = "あいうあお"; 二つ目が「い」になる感じです。
Zuishin

2019/01/29 08:05

二つ目というのはどういう意味ですか? 私の前のコメントを参照して答えてください。
papinianus

2019/01/29 08:08

> 結果的には、string s = "あいうあお"; は回答しています。Zuishin様の質問にご回答ください。
Zuishin

2019/01/29 08:08

それと、変更したいのが文字なのか文字列なのかでも方法が変わってきます。 「あ」という一文字でいいのか、それとも文字列になる可能性があるのかも答えてください。
SaharaDesert

2019/01/29 08:09

先頭から二文字目の "あ" を "い" に変更した場合 "いいあ" こちらです。
Zuishin

2019/01/29 08:10

二文字目であればどんな文字でも変更するのか、それとも「あ」の場合のみ変更するのかも答えてください。
SaharaDesert

2019/01/29 08:11

「あ」の場合のみ変更します。
Zuishin

2019/01/29 08:12

「あ」は必ず一文字なのか、それとも文字列になる可能性があるのかも答えてください。
papinianus

2019/01/29 08:15

すみません。混乱してきました。「先頭から」「2文字目」の「あ」を変更するときの「あ」が「あるふぁ」ということですか?2'文字'目ではないということ?
Zuishin

2019/01/29 08:17

意図が明確になるよう、複数のサンプルを提示してください。 文字ではなく、文字列を対象にし、三種類以上のサンプルを出してください。
Zuishin

2019/01/29 08:38 編集

サンプルの提示が難しいようなので回答しました。質問は受け付けませんし、修正もしません。
guest

回答2

0

C#

1using System; 2using System.Text.RegularExpressions; 3 4namespace ConsoleApp1 5{ 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 var data = new[] { "あああ", "ううう" }; 11 foreach (var datum in data) 12 { 13 Console.WriteLine(ReplaceNthString(datum, 2, "あ", "い")); 14 } 15 Console.ReadKey(); 16 } 17 18 static string ReplaceNthString(string input, int index, string src, string dst) 19 { 20 return Regex.Replace(input, $"(?<=^.{{{index - 1}}}){Regex.Escape(src)}", dst); 21 } 22 } 23}

投稿2019/01/29 08:35

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaharaDesert

2019/01/29 08:42

ありがとうございます。
Zuishin

2019/01/29 08:47

仕様がちゃんと説明できない上にサンプルも提示できず、コロコロ変わる上に説明と回答が異なっていてもわからないような質問には答えられません。この回答は私の自己満足です。
guest

0

ベストアンサー

  • 2つ目以降の"あ"を"い"にするとき、string.Replaceだけでは無理だと思いました
  • 2つめだけを何かにするとき、string.Replaceは不適切だと思いました

csharp

1 public static void Main() 2 { 3 var s = "ああうああ"; 4 //Console.WriteLine($"{s.Substring(0,1)}{s.Substring(1).Replace("あ","い")}"); //ちがうらしい 5 Console.WriteLine($"{new string(s.Select((x,i) => i != 1 || x != 'あ'? x : 'い').ToArray())}");//先頭から2文字目の「あ」という1文字のみを「い」にする 6 }

※ Regex.Replaceなら2つめを変更できると思います。

投稿2019/01/29 07:31

編集2019/01/29 08:19
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaharaDesert

2019/01/29 07:40

解答ありがとうございます。 試してみます。
papinianus

2019/01/29 08:13

次の修正をしました。 > 先頭から2文字目の「あ」という1文字のみを「い」にする
SaharaDesert

2019/01/29 08:15

解答ありがとうございます。 試してみます
SaharaDesert

2019/01/29 08:16

質問です。 (x,i) => i != 1 こちらの"i"は、何でしょうか。
papinianus

2019/01/29 08:17

indexのiです。文字列の何番目か(ただし0からはじまるので2番目は1)
papinianus

2019/01/29 08:19

ごめんなさい==と!=をまちがってました。今修正したので再度試してください
SaharaDesert

2019/01/29 08:33

出来ましたありがとうございます。 Regex.Replaceなら2つめを変更できると思います。 とありますが、そのやり方もお手数おかけしますが、教えていただけますでしょうか。 よろしくお願いいたします。
papinianus

2019/01/29 08:39

なやんでるうちに回答ついたので。
SaharaDesert

2019/01/29 08:43

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問