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

質問編集履歴

1

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

2017/07/03 14:36

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -92,4 +92,69 @@
92
92
  ###補足情報(言語/FW/ツール等のバージョンなど)
93
93
  java version "1.8.0_131"
94
94
  Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
95
- Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
95
+ Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
96
+
97
+ ###追記(2017/07/03)
98
+ 問題の解決後、デバッグも完了し、プログラムが完成しました。
99
+ 同種のプログラムを制作しようとしている方の助けになればと思い、完成品のソースコードを公開いたします。
100
+
101
+ ```Java
102
+ import java.util.*;
103
+
104
+ public class b004{
105
+ static String targetSplit[] = new String[4];
106
+ public static boolean ipSearch (int[] octets){
107
+ for (int i = 0; i < 4; i++){
108
+ // 抽出対象の第iオクテットが"*"のとき
109
+ if (i >= 2 && targetSplit[i].equals("*")){
110
+ if (octets[i] < 0 && octets[i] > 255){
111
+ return false;
112
+ }
113
+ }
114
+ // 抽出対象の第iオクテットが"-"を含むとき
115
+ else if (i >= 2 && targetSplit[i].contains("-")){
116
+ // 第iオクテットの"[", "]"を除いたものをハイフン区切りで配列に格納
117
+ String range[] = targetSplit[i].substring(1, targetSplit[i].length()-1).split("-", 0);
118
+ int rangeInt[] = new int[2];
119
+ for (int j = 0; j < 2; j++){
120
+ rangeInt[j] = Integer.parseInt(range[j]);
121
+ }
122
+ if (octets[i] < rangeInt[0] || octets[i] > rangeInt[1]){
123
+ return false;
124
+ }
125
+ }
126
+ // 抽出対象の第iオクテットが数値のとき
127
+ else if (octets[i] != Integer.parseInt(targetSplit[i])){
128
+ return false;
129
+ }
130
+ }
131
+ return true;
132
+ }
133
+ public static void main(String[] args) {
134
+ Scanner sc = new Scanner(System.in);
135
+ String target = sc.nextLine();
136
+ // 抽出対象のIPを"."区切りで分割し、配列に格納
137
+ targetSplit = target.split("\\.", 0);
138
+ int n = sc.nextInt();
139
+ String logs[][] = new String[n][8];
140
+ String ips[][] = new String[n][4];
141
+ int ipsInt[][] = new int[n][4];
142
+ sc.nextLine();
143
+ // 各ログごとにIPが抽出対象に含まれるかチェックし、含まれる場合出力
144
+ for (int i = 0; i < n; i++){
145
+ String log = sc.nextLine();
146
+ logs[i] = log.split(" ", 8);
147
+ ips[i] = logs[i][0].split("\\.", 0);
148
+ for (int j = 0; j < 4; j++){
149
+ ipsInt[i][j] = Integer.parseInt(ips[i][j]);
150
+ }
151
+ }
152
+ for (int i = 0; i < n; i++){
153
+ if (ipSearch(ipsInt[i])){
154
+ // IP、日時、ファイル名をスペース区切りで出力
155
+ System.out.println(String.join(" ", logs[i][0], logs[i][3].substring(1, logs[i][3].length()), logs[i][6]));
156
+ }
157
+ }
158
+ }
159
+ }
160
+ ```