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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1910閲覧

文字列中の二文字を入れ替えたい

moscow3

総合スコア201

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/08/30 10:08

文字列中の二文字を入れ替えるアルゴリズムはどうすればよいでしょうか?

例えば、
UGCACGAU というような文字列のAとUを入れ替えて、
AGCUCGUA のようにしたいです。

単純に'UGCACGAU'.replaceAll(/A/g,'U').replaceAll(/U/g,'A')では当然ながらうまくいきません

自分が考えたのは

javascript

1s="UGCACGAU" 2console.log(s.replace(/A/g,'@').replace(/U/g,'A').replace(/@/g,'U'))

という風にワンクッション挟む方法ですが、 @という文字が文字列に存在した場合などを考えた時に不十分です。

①このように文字列ないの任意の2文字を入れ替えるアルゴリズム(もしくはメソッドなど)はあるのでしょうか?

②時間差でそれが起きても大丈夫なようなアルゴリズムはあるでしょうか?

※時間差とは、例えば、 banana をはじめに bbnbnb のようにして表示させ、ユーザーがボタンを押したらabnbnb に替える というようなことです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

①このように文字列ないの任意の2文字を入れ替えるアルゴリズム(もしくはメソッドなど)はあるのでしょうか?

ヒットした文字列は単純な文字列ではなく、関数送りにすることも出来るので、
下記のようなコードならば意図通りになりますね。

JavaScript

1s = "UGCACGAU"; 2replaceMap = { 3 A: "U", 4 U: "A", 5}; 6console.log(s.replace(/[AU]/g, function(it){ 7 return replaceMap[it]; 8})); // AGCUCGUA

②時間差でそれが起きても大丈夫なようなアルゴリズムはあるでしょうか?
※時間差とは、例えば、 banana をはじめに bbnbnb のようにして表示させ、ユーザーがボタンを押したらabnbnb に替える というようなことです。

最初の文字列である「banana」を所持し続けておくことが出来れば可能です。

材料とレシピがあれば、いつでも同じ料理を作って出せますよね?
「開始時点に必要なもの」と「やった作業」をしっかり管理する事でいつでも再現出来ますし、その先を作って見せる事も可能です。

大事なのは下記2点です。
勉強を続けていれば自在に書けるようになるはずです。

  • 何処のスコープに変数を宣言するか
  • どんな型(文字列?数値?配列?)で変数を保存するか

投稿2018/08/30 10:49

編集2018/08/30 10:54
miyabi-sun

総合スコア21158

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

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

0

ブラックリスト+ホワイトリスト方式のフィルタでよく使われる手法ですね。
(バカはNGだけど、親バカはOKみたいな)

よくあるのは、中間の文字列をもう少し長く(***とか###等々)にして対応する方法です。
厳密にやるのであれば、最初に中間文字列が無いことを確認してから置換すると良いです。
*あった場合は他の文字列を使うとよいです。

①このように文字列ないの任意の2文字を入れ替えるアルゴリズム(もしくはメソッドなど)はあるのでしょうか?

②時間差でそれが起きても大丈夫なようなアルゴリズムはあるでしょうか?

こちらの質問に関してはよくわかりませんが参考まで。

投稿2018/08/30 10:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問