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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

1417閲覧

マッチしたものを書き換える

Tutti

総合スコア83

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/19 08:40

マッチしたところの文字を書き換えるためにreplaceやreplaceAllなどを使わずにfor文を使って書き換えたいです。
ですが、ネットのどこにも例文がなく、行き詰っています。
for文を使った例文を教えていただけませんか?

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

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

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

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

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

Tutti

2016/07/19 08:54

indexOfやformatなどいろいろ使えないか調べました。ですが、見つからなかったので、何かいいアイデアがないかと思いここに投稿したまでです。
guest

回答5

0

StringBuilderを使った改良版。

java

1public class Q41586 { 2 3 public static void main(String[] args) { 4 String str = "あぇあぇあぇ"; 5 StringBuilder builder = new StringBuilder(str); 6 int i = 0; 7 String target = "あ"; 8 String replacer = "ね"; 9 while ((i = builder.indexOf(target, i)) >= 0){ 10 builder.delete(i, i + target.length()); 11 builder.insert(i, replacer); 12 } 13 System.out.println(builder); 14 } 15 16}

投稿2016/07/20 01:01

swordone

総合スコア20651

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

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

0

indexOfを使うならこんな感じでしょうか。
for文ではなく、while文ですが。

String str = "abcabcabc"; String target = "c"; String rep = "ww"; while(str.indexOf(target) > 0) { String sub = str.substring(0, str.indexOf(target)); sub += rep; sub += str.substring(str.indexOf(target) + target.length(), str.length()); str = sub; } System.out.println("[" + str + "]");

投稿2016/07/19 12:56

dsuzuki

総合スコア1682

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

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

Tutti

2016/07/20 00:36

回答してくださり、ありがとうございます!! このような書き方もあるのですね!今後の参考になります! ありがとうございます!
Tutti

2016/07/21 04:51

こんにちは。 2点ほど質問させてください。 String sub = str.substring(0, str.indexOf(target)); この式の中に、なぜ、0 を入れておられるのですか? sub += str.substring(str.indexOf(target) + target.length(), str.length()); この式の target.length(), str.length(); この最後の部分なのですが、なぜ大本のstr.indexOf(target)へ連結されてるのですか?
swordone

2016/07/21 05:04

少しは調べましょう。substringメソッドは引数2つ取った場合、(1つ目の引数)番目の文字から(2つ目の引数-1)番目の文字までの文字列を返すメソッドです。
Tutti

2016/07/21 05:16

substringのことは調べました。抜きだす部分の指定は、インデックス番号で指定し、終了インデックスに指定した値は含まれない。と認知しておりました。そのため、そうやって使うんだとしか頭の中にありませんでした。すみません。お手数おかけしました。
Tutti

2016/07/21 05:24

わかりました! String sub = str.substring(0, str.indexOf(target)); ここの0は、0から始まるということですね!
guest

0

ベストアンサー

こんな感じでどうでしょう?

java

1public class Match { 2 3 public static void main(String[] args) { 4 5 String EditStr = ""; 6 String ReplaceStr = "z"; 7 String MatchStr = "c"; 8 String InputStr = "abcde"; 9 String[] AryStr = InputStr.split(""); 10 11 for (int i = 0; i < AryStr.length; i++) { 12 if (AryStr[i].equals(MatchStr)) { 13 EditStr = EditStr + ReplaceStr; 14 } else { 15 EditStr = EditStr + AryStr[i]; 16 } 17 18 } 19 20 System.out.println("編集前の値は" + InputStr + "です"); 21 System.out.println("編集後の値は" + EditStr + "です"); 22 23 } 24 25}

投稿2016/07/19 09:14

tomo.ina

総合スコア357

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

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

Tutti

2016/07/20 00:24

参考にさせていただきます!!!! 私のレベルに合った解き方でした!! 参考にさせていただきます!!!!! ありがとうございます!!
Tutti

2016/07/20 01:44

すみません。 String EditStr = ""; この初期化はなぜ必要になるのか教えていただけませんか? なぜ変換するものを” ”に加算して代入する必要があるのでしょうか?
tomo.ina

2016/07/20 01:52

EditStrに一文字ずつ文字をセットしていきます。 その際に初期化していないEditStrを使用しないために、 「String EditStr = "";」としています。 >なぜ変換するものを” ”に加算して代入する必要があるのでしょうか? これはどのような意味でしょうか?
Tutti

2016/07/20 01:54

String EditStr = " "; これは、空白を作って、空白のところに”!”を入れるということですか?!?!
Tutti

2016/07/20 01:57

String EditStr = ""; String ReplaceStr = "z"; EditStr = EditStr + ReplaceStr; ↑ここの式を見て、加算して代入していると思いました。
tomo.ina

2016/07/20 02:02

「EditStr = EditStr + ReplaceStr;」 String型なので、加算でなく文字列連結をしています。 Javaには色々な文字列連結方法がありますので、 「+」演算子を使用しないようにもできますよ。
Tutti

2016/07/20 02:05

なるほど!そうでした。String型の+は連結でした。 すみません。思い違いでした。
Tutti

2016/07/20 05:30

何度もすみません。 String EditStr = ""; これなんですが、初期化をしないとエラーになるので初期化をしていろのは理解できるのですが、なぜ「” ”」これが必要になってくるのか、なぜ連結しているのかを理解できないのです。 なぜなのか教えていただけませんか?
tomo.ina

2016/07/20 05:46

>なぜ「” ”」これが必要になってくるのか 「String EditStr = ""」としている理由ですか? 「String EditStr = null」でもよいですが、この場合、文字連結をする際に Null判定をしないといけないので「""(空文字)」で初期化しています。 >なぜ連結しているのか これはどこの部分を言われていますか?
Tutti

2016/07/20 05:53

if文の中の連結のところです。 if (AryStr[i].equals(MatchStr)) { EditStr = EditStr + ReplaceStr; } else { EditStr = EditStr + AryStr[i];
tomo.ina

2016/07/20 06:09

「String[] AryStr = InputStr.split("");」 とすることでAryStrにはInputStrを1文字ずつ分割した値が格納されています。 AryStr[0] = "a" AryStr[1] = "b" AryStr[2] = "c" AryStr[3] = "d" AryStr[4] = "e" if (AryStr[i].equals(MatchStr)) でAryStrを順番にMatchStrと同じか比較しています。      EditStrの値 処理前  "" 1回目 "a"  AryStr[0]とMatchStrは異なるので、AryStr[0]を連結 2回目 "ab"     AryStr[1]とMatchStrは異なるので、AryStr[1]を連結 3回目 "abz"     AryStr[2]とMatchStrは同じなので、ReplaceStrを連結 4回目 "abzd"    AryStr[3]とMatchStrは異なるので、AryStr[3]を連結 5回目 "abzde"    AryStr[4]とMatchStrは異なるので、AryStr[4]を連結 処理の中身としては上記のような流れです。 質問の回答になっていますでしょうか?
Tutti

2016/07/20 07:49

はい。とても分かりやすく、理解することが出来ました! 本当にありがとうございます。感謝いたします。
guest

0

まず文字を探すところからですね。

文字列検索(直感的な文字列検索とKMP法)

見つかったら置き換えるだけです。

投稿2016/07/19 08:45

Mr_Roboto

総合スコア2208

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

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

Tutti

2016/07/19 08:55

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

0

新しい文字列を作ります。
マッチしたものより前の文字列を新しい文字列に加えます。
置換文字列を加えます。
これをマッチしなくなるまで繰り返します。(ここがループ)
最後に、残りを加えます。
以上です。

投稿2016/07/19 08:44

Zuishin

総合スコア28660

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

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

Tutti

2016/07/19 08:58

置換の仕方が分からず、なにかいい方法はないかなと思い、質問させていただきました。 質問について説明不足でした。 すみません。
Zuishin

2016/07/19 09:04

構いませんよ。詳しく説明してください。
Tutti

2016/07/20 00:33

”あぇあぇあぇ”とあったら、”あ”を”ね”に書き換えたいのですが、replaceやreplaceAllなどを使わずにfor分を使ってプログラムを作成したいのです。 ですが、ネットで検索してみるとfor文を使って問題を解いている方がおられず、indexOfやformatを使えばどうにかできるのではないかと思ったのですが、何か間違っているような気がして。。。 なので、ここにいる方達なら何かいい方法をご存知ではないかと思い、質問させていただきました。
Zuishin

2016/07/20 01:42

そこは読み取れたので、その部分に関しては説明は不足していませんよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問