我试图拆分这个长博客字符串并对其进行排序:
"140.184.37.105 - - [08/Aug/2001:21:06:36 -0300] "GET /~csc226/outline.htm HTTP/1.0" 200 9748 "http://cs.stmarys.ca/~csc226/" "Mozilla/4.73 [en] (WinNT; U)""
我当前的代码肯定不起作用,我试图找出改进代码或使用不同方法解决此问题的方法。它获取了许多博客条目的数组,包括上面的一个。我主要是想弄清楚如何对数组进行排序,将日期显示为8月8日,ip地址为140.184.37.105等。
void getString(int i)
{
return bin[i];
}
public void getIP(int i)
{
int IPlength = bin[i].length() - bin[i].indexOf("- -");
String IP = bin[i].substring(0, bin[i].length()-IPlength);
}
void getDate(int i)
{
String Date = bin[i].substring(bin[i].indexOf('['), bin[i].indexOf(']'));
}
void getPage(int i)
{
String Page = bin[i].substring(bin[i].indexOf("GET"), bin[i].indexOf("1.0"));
}
对不起,如果这个问题不重要,但我是新手,并且不知道如何处理或解决这个问题。
结果应如下所示:
ip地址:140.184.37.105
括号内的日期和时间:[08 / Aug / 2001:21:06:36 -0300]
引用请求的页面:" GET /~csc226/outline.htm HTTP / 1.0"
HTTP状态代码返回给客户端(200 =成功):200
答案 0 :(得分:1)
如果您绝对想自己写,我建议您开始刷新regular expressions。
但是,对于此类任务,我建议使用logstash之类的日志分析工具。
答案 1 :(得分:0)
假设您提供的字符串格式始终保持不变,请使用此140.184.37.105 - - [08/Aug/2001:21:06:36 -0300] "GET /~csc226/outline.htm HTTP/1.0" 200 9748 "http://cs.stmarys.ca/~csc226/" "Mozilla/4.73 [en] (WinNT; U)"
它实际上非常简单,你只需要熟悉java http://docs.oracle.com/javase/7/docs/api/java/lang/String.html中的String类方法
例如: -
public class HelloWorld{
static String s="140.184.37.105 - - [08/Aug/2001:21:06:36 -0300] \"GET /~csc226/outline.htm HTTP/1.0\" 200 9748 \"http://cs.stmarys.ca/~csc226/\" \"Mozilla/4.73 [en] (WinNT; U)";
public static void main(String []args){
System.out.println(getIp());
System.out.println(getTime());
}
public static String getIp(){
String sArr[]= s.split("-");
return sArr[0];
}
public static String getTime(){
return s.substring(21,46);
}
//more functions here
}
如果您的String格式发生了变化,那么您可以使用正则表达式,这将帮助您识别和查找String中的模式。这是一个关于java http://www.vogella.com/tutorials/JavaRegularExpressions/article.html
中正则表达式的好教程