回答編集履歴

1

追記

2019/03/24 10:23

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -107,3 +107,151 @@
107
107
 
108
108
 
109
109
  ラムダ式内から外部変数への再代入が効かないので、苦肉の策でクラスを組んでいます。
110
+
111
+
112
+
113
+ 別解その1
114
+
115
+ ---
116
+
117
+ 関数型インターフェースを使わないで頑張ってみた方法。[Wandbox](https://wandbox.org/permlink/x3B7QqjipmmJdLs8)
118
+
119
+ ```Java
120
+
121
+ import java.util.regex.Pattern;
122
+
123
+
124
+
125
+
126
+
127
+ class Main {
128
+
129
+ public static void main(String[] args) {
130
+
131
+ var text = "apple banana belly banana apple belly";
132
+
133
+
134
+
135
+ String dst;
136
+
137
+ {
138
+
139
+ var dstBuilder = new StringBuilder();
140
+
141
+ var matcher = Pattern.compile("apple").matcher(text);
142
+
143
+
144
+
145
+ var offset = 0;
146
+
147
+ for(var cnt = 0; matcher.find(offset); ++cnt) {
148
+
149
+ var start = matcher.start();
150
+
151
+ var end = matcher.end();
152
+
153
+
154
+
155
+ dstBuilder.append(
156
+
157
+ text.substring(offset, start)
158
+
159
+ );
160
+
161
+ dstBuilder.append(
162
+
163
+ String.format("%s#%d", matcher.group(), cnt+1)
164
+
165
+ );
166
+
167
+ offset = end;
168
+
169
+ }
170
+
171
+ dstBuilder.append(
172
+
173
+ text.substring(offset, text.length())
174
+
175
+ );
176
+
177
+
178
+
179
+ dst = dstBuilder.toString();
180
+
181
+ }
182
+
183
+
184
+
185
+ System.out.println(dst);
186
+
187
+ }
188
+
189
+ }
190
+
191
+ ```
192
+
193
+
194
+
195
+ 別解その2
196
+
197
+ ---
198
+
199
+ 正規表現を使わずに頑張ってみた方法。[Wandbox](https://wandbox.org/permlink/5To8TaU7goFJSlxV)
200
+
201
+ 各単語がスペース区切りならこれで充分です。
202
+
203
+ ```Java
204
+
205
+ import java.util.StringJoiner;
206
+
207
+
208
+
209
+
210
+
211
+ class Main {
212
+
213
+ public static void main(String[] args) {
214
+
215
+ var text = "apple banana belly banana apple belly";
216
+
217
+
218
+
219
+ String dst;
220
+
221
+ {
222
+
223
+ var joiner = new StringJoiner(" ");
224
+
225
+
226
+
227
+ var cnt = 0;
228
+
229
+ for(var word: text.split(" ")) {
230
+
231
+ if(word.equals("apple")) {
232
+
233
+ word = String.format("%s#%d", word, ++cnt);
234
+
235
+ }
236
+
237
+
238
+
239
+ joiner.add(word);
240
+
241
+ }
242
+
243
+
244
+
245
+ dst = joiner.toString();
246
+
247
+ }
248
+
249
+
250
+
251
+ System.out.println(dst);
252
+
253
+ }
254
+
255
+ }
256
+
257
+ ```