Javaでコードを書いている時に、replace()メソッドを使う時に、タイトルのエラーで詰まってしまったので、備忘録としてまとめます。
以下のようにしてコードを書いていたのですが、
class Main {
public static void main(String args[]){
String str = "あいうえお";
str.charAt(0);
String targetWord = String.valueOf(str.charAt(0));
System.out.println(str.replace(str.charAt(0), "か"));
}
}
これで実行しようとしたらタイトルのエラーになってしまいました。
やろうとしたこと
やろうとしたこととしては、
・charAt()メソッドで取得した文字を、replaceメソッドで置換する
というものです。
それをする時に、replaceの引数に直接charAt()メソッドで指定した文字列を
System.out.println(str.replace(str.charAt(0), "か"));
このようにして変数strに対して、頭文字をか
に置換したかったので、第一引数に対象の文字列の頭文字を取得する処理を直接入れようとしました。
ただ、それをしてしまうと
main.java:6: エラー: replaceに適切なメソッドが見つかりません(char,String)
となってしまいます。
原因としては、charAt()メソッドで指定して取得するとそのデータ型はString型ではなくchar型になります。
しかし、replace()メソッドの引数に入れられるものはString型だけです。なのでchar型を入れるとエラーになってしまうわけです。
ではどうしたらいいのかというと、char型をStringに変換してしまえば解決します。
変換するには、StringオブジェクトのvalueOf()メソッドで指定します。
String targetWord = String.valueOf(str.charAt(0));
このように、valueOfメソッドでChar型からStringに変更します。
こうすることで、replace()メソッドに入れてもエラーにならないようになりました。
後は単純にreplaceメソッドの中に入れてあげれば大丈夫です。
String targetWord = String.valueOf(str.charAt(0));
System.out.println(str.replace(targetWord, "か"));
修正後のコード
class Main {
public static void main(String args[]){
String str = "あいうえお";
String targetWord = String.valueOf(str.charAt(0));
System.out.println(str.replace(targetWord, "か"));
}
}
以上になります。
なにかの参考になったら嬉しいです。
追記
public static void main(String[] args) {
String str = "あいうえお";
System.out.println(str.replace(str.charAt(0), 'か'));
}
でSystem.out.println(str.replace(str.charAt(0), 'か'));
の部分で、第荷引数をシングルコーテーションで囲うとchar型として指定することができます。
そうすれば、第一引数と第二引数で同じchar型に指定できます。
初めて知りました。
コメントでアドバイスをもらいました。
ありがとうございます!!!