回答編集履歴

3

質問を引用する形に修正

2021/12/19 07:57

投稿

jimbe
jimbe

スコア12670

test CHANGED
@@ -50,7 +50,15 @@
50
50
 
51
51
  ----
52
52
 
53
+ > 「はじめに出た文字だけを残し、その後の重複した文字を消す」ということについて、str.replaceを使ってみたのですが、すべて消えてしまう
54
+
55
+
56
+
57
+ 消えてしまうので、消える前に他に保存することを考えます。つまり「はじめに出た文字を他に保存し、元の文字列からその文字を全部消す」です。
58
+
59
+
60
+
53
- 例えば、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
61
+ 以下のように、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
54
62
 
55
63
  ```java
56
64
 

2

追加

2021/12/19 07:57

投稿

jimbe
jimbe

スコア12670

test CHANGED
@@ -45,3 +45,31 @@
45
45
  と加えればよいはずです。
46
46
 
47
47
  メソッドの戻り値として何を指定するかは、このメソッドの目的によって決まっているはずですので、ご自身で書き換えてください。
48
+
49
+
50
+
51
+ ----
52
+
53
+ 例えば、[元文字列の先頭1文字を取り出し]て[戻り値用変数に追加]し、[その文字を元文字列から全部消す]のを[元文字列が空になるまで繰り返す]と、終わった時点で戻り値用変数には重複の無い文字が集められているはずです。
54
+
55
+ ```java
56
+
57
+ public String removeDuplicates(String strBefore) {
58
+
59
+ String result = ""; //返り値用変数
60
+
61
+ while(!strBefore.isEmpty()) { //空になるまで
62
+
63
+ String c = "" + strBefore.charAt(0); //先頭1文字を(文字列として)取り出す
64
+
65
+ result += c; //追加
66
+
67
+ strBefore = strBefore.replaceAll(c, ""); //該当文字を全部消す
68
+
69
+ }
70
+
71
+ return result;
72
+
73
+ }
74
+
75
+ ```

1

追加

2021/12/19 07:52

投稿

jimbe
jimbe

スコア12670

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