统计日志中符合(GET ip 请求数)这个条件的请求总数。
这道题考的其实就是正则表达式的知识点,笔试的是时候时间太紧了,细节没写对,杯具。。。
回来自己写了下,发出来纪念下,呵呵!
package test1;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Wang {
// String regextIp = "GET//s(([1]{0,1}[0-9]{1,2})|([2]{1}[0-5]{2}))//.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-5]{2}))//.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-5]{2}))//.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-5]{2}))//s[0-9]{1,}";//正则表达式 ,存在bug
String regextIp = "GET\\s(([1]{0,1}[0-9]{1,2})|([2]{1}[0-4]{1}[0-9]{1})|([2][5]{1}[0-5]{1}))\\.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-4]{1}[0-9]{1})|([2][5]{1}[0-5]{1}))\\.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-4]{1}[0-9]{1})|([2][5]{1}[0-5]{1}))\\.(([1]{0,1}[0-9]{1,2})|([2]{1}[0-4]{1}[0-9]{1})|([2][5]{1}[0-5]{1}))\\s[0-9]{1,}";// 修正后的正则表达式
Pattern p = Pattern.compile(regextIp); //这一步很耗时,可以申明为全局变量
public static void main(String[] args) {
String request = "GET 255.250.255.125 12";
Matcher m = p.matcher(request);
int requestSum = 0;
if (m.matches()) {
String[] str = request.split(" ");
requestSum += Integer.parseInt(str[2]);
}
System.out.println(requestSum);
}
}
其中要点是ip地址的正则表达式的写法:ip地址是小于255的。
原题是从日志文件中读取,这里没有!
注意:正则表达式已修改,以前的有bug。