Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

文字列置換についてです

文字列の置換法で悩んでいます。

置換対象の文章があり、置換したい文字列と置換後の文字列を複数持っているとし
ます。
置換する文字は同じ文字全てを対象にするわけではなく、指定した文字列のみで
す。文字列の取得はドラッグで選択した文字列で取得する予定です(ですので文字
の位置がわかっています)

文字の位置がわかっていれば、指定して任意の文字列に変更すれば出来ます。です
が、複数あると一つ変更してしまうと元の文章が替わってしまい、文字の位置もず
れてしまいます。

最悪、一つの置換が終ってから、次の置換文字の位置を取得する方法もあります
が、設計上で切る限り避けたい状況です。理想としては、全ての置換内容が決まっ
てから変換したい、置換内容が変更しても問題がないようにしたいです。ですの
で、現在は文字列の位置で判断していますが、他の方法でも構いません。

何か良い方法はありませんか?

宜しくお願いします。

3

回答

82004

閲覧

3件の回答

評価

0

文章ってのがStringで表されてるなら、#replaceAll()って便利なメソッドがあるけど、それで足りないものは何?

「文章」と言われてもそれが具体的にどこにどんなふうに持っておかれてるのか、文章だけでは全く分からない。
悩んでいるのは分かるが、質問するならもう少し読む側が状況を把握しやすいように、考えてから書こう。

評価

0

説明不足でしたすみません。
replaceAll()は全ての文字列を変えてしまいますよね。
3番目に出てきたAという文字列と4番目に出てきたAという文字列は同じ
Aでも、置換したいのは3番目の文字列だけ、としたいのです。

文字列だけでなく、複数同じ文字列がある中の「この文字列」の変換を行
いたいのです。


文章はswingのJTextAreaに入力されている文章ですから、Stringで問題
ありません。

評価

0

順番が決まってるならそこもパターンに突っ込んでしまえば、できると思うけど。
最初の1つだけなら#replaceFirst()だね。

古典的な方法だと、置換元文字列で#split()した配列を連結するというのもある。
また、#indexOf()して#substring()で区切ったものを順に連結していき、置換したい番目だけ置換後の文字列を連結すれば、目的の文字列を得られる。

置換前の文字列と置換後の文字列の長さの差を取って、置換した場合は残りの各出現位置を操作するというのもある。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。