質問編集履歴

1

プログラム完成のため、完成品のソースコードを追記。

2017/07/03 14:36

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -187,3 +187,133 @@
187
187
  Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
188
188
 
189
189
  Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
190
+
191
+
192
+
193
+ ###追記(2017/07/03)
194
+
195
+ 問題の解決後、デバッグも完了し、プログラムが完成しました。
196
+
197
+ 同種のプログラムを制作しようとしている方の助けになればと思い、完成品のソースコードを公開いたします。
198
+
199
+
200
+
201
+ ```Java
202
+
203
+ import java.util.*;
204
+
205
+
206
+
207
+ public class b004{
208
+
209
+ static String targetSplit[] = new String[4];
210
+
211
+ public static boolean ipSearch (int[] octets){
212
+
213
+ for (int i = 0; i < 4; i++){
214
+
215
+ // 抽出対象の第iオクテットが"*"のとき
216
+
217
+ if (i >= 2 && targetSplit[i].equals("*")){
218
+
219
+ if (octets[i] < 0 && octets[i] > 255){
220
+
221
+ return false;
222
+
223
+ }
224
+
225
+ }
226
+
227
+ // 抽出対象の第iオクテットが"-"を含むとき
228
+
229
+ else if (i >= 2 && targetSplit[i].contains("-")){
230
+
231
+ // 第iオクテットの"[", "]"を除いたものをハイフン区切りで配列に格納
232
+
233
+ String range[] = targetSplit[i].substring(1, targetSplit[i].length()-1).split("-", 0);
234
+
235
+ int rangeInt[] = new int[2];
236
+
237
+ for (int j = 0; j < 2; j++){
238
+
239
+ rangeInt[j] = Integer.parseInt(range[j]);
240
+
241
+ }
242
+
243
+ if (octets[i] < rangeInt[0] || octets[i] > rangeInt[1]){
244
+
245
+ return false;
246
+
247
+ }
248
+
249
+ }
250
+
251
+ // 抽出対象の第iオクテットが数値のとき
252
+
253
+ else if (octets[i] != Integer.parseInt(targetSplit[i])){
254
+
255
+ return false;
256
+
257
+ }
258
+
259
+ }
260
+
261
+ return true;
262
+
263
+ }
264
+
265
+ public static void main(String[] args) {
266
+
267
+ Scanner sc = new Scanner(System.in);
268
+
269
+ String target = sc.nextLine();
270
+
271
+ // 抽出対象のIPを"."区切りで分割し、配列に格納
272
+
273
+ targetSplit = target.split("\\.", 0);
274
+
275
+ int n = sc.nextInt();
276
+
277
+ String logs[][] = new String[n][8];
278
+
279
+ String ips[][] = new String[n][4];
280
+
281
+ int ipsInt[][] = new int[n][4];
282
+
283
+ sc.nextLine();
284
+
285
+ // 各ログごとにIPが抽出対象に含まれるかチェックし、含まれる場合出力
286
+
287
+ for (int i = 0; i < n; i++){
288
+
289
+ String log = sc.nextLine();
290
+
291
+ logs[i] = log.split(" ", 8);
292
+
293
+ ips[i] = logs[i][0].split("\\.", 0);
294
+
295
+ for (int j = 0; j < 4; j++){
296
+
297
+ ipsInt[i][j] = Integer.parseInt(ips[i][j]);
298
+
299
+ }
300
+
301
+ }
302
+
303
+ for (int i = 0; i < n; i++){
304
+
305
+ if (ipSearch(ipsInt[i])){
306
+
307
+ // IP、日時、ファイル名をスペース区切りで出力
308
+
309
+ System.out.println(String.join(" ", logs[i][0], logs[i][3].substring(1, logs[i][3].length()), logs[i][6]));
310
+
311
+ }
312
+
313
+ }
314
+
315
+ }
316
+
317
+ }
318
+
319
+ ```