teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

質問を引用する形に修正

2021/12/19 07:57

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -24,7 +24,11 @@
24
24
  メソッドの戻り値として何を指定するかは、このメソッドの目的によって決まっているはずですので、ご自身で書き換えてください。
25
25
 
26
26
  ----
27
+ > 「はじめに出た文字だけを残し、その後の重複した文字を消す」ということについて、str.replaceを使ってみたのですが、すべて消えてしまう
28
+
29
+ 消えてしまうので、消える前に他に保存することを考えます。つまり「はじめに出た文字を他に保存し、元の文字列からその文字を全部消す」です。
30
+
27
- 例えば、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
31
+ 以下のように、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
28
32
  ```java
29
33
  public String removeDuplicates(String strBefore) {
30
34
  String result = ""; //返り値用変数

2

追加

2021/12/19 07:57

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -21,4 +21,18 @@
21
21
  }
22
22
  ```
23
23
  と加えればよいはずです。
24
- メソッドの戻り値として何を指定するかは、このメソッドの目的によって決まっているはずですので、ご自身で書き換えてください。
24
+ メソッドの戻り値として何を指定するかは、このメソッドの目的によって決まっているはずですので、ご自身で書き換えてください。
25
+
26
+ ----
27
+ 例えば、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
28
+ ```java
29
+ public String removeDuplicates(String strBefore) {
30
+ String result = ""; //返り値用変数
31
+ while(!strBefore.isEmpty()) { //空になるまで
32
+ String c = "" + strBefore.charAt(0); //先頭1文字を(文字列として)取り出す
33
+ result += c; //追加
34
+ strBefore = strBefore.replaceAll(c, ""); //該当文字を全部消す
35
+ }
36
+ return result;
37
+ }
38
+ ```

1

追加

2021/12/19 07:52

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -1,5 +1,10 @@
1
- > public String removeDuplicates(String str)
1
+ > java: return文が指定されていません
2
2
 
3
+ ```java
4
+ public String removeDuplicates(String str) {
5
+ (省略)
6
+ }
7
+ ```
3
8
  メソッドの宣言が「戻り値として String を返す」となっている以上、どのような場合("例外"を発する場合以外)でも String オブジェクトもしくは null を返すような return 文を実行するようにコードが書かれている必要があります。
4
9
 
5
10
  ご提示のコードには return 文自体が見当たりませんし、試されたという