2014-06-10 132 views
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)"" 

我当前的代码肯定不行,我试图找出改善我的代码的任何方式或者使用不同的方法来解决这个问题。它获得了许多博客条目的数组,包括上面的一个。我主要是想弄清楚如何排序的数组显示日期为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/8/2001:21:06:36 -0300]

请求的网页加上引号: “GET /~csc226/outline.htm HTTP/1.0”

HTTP状态代码返回给客户端(200 =成功):200

+0

如果你明确定义了你想要做的是什么,那么我们可以为你提供更好的机会。甚至有机会你会更好地了解如何解决它。 – shmosel

+0

所以你想按日期排序,还是你也想修改内容(改变顺序)? – npinti

+0

为什么您发布的解决方案不起作用? –

回答

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 

} 

如果您的字符串格式发生变化,那么您可以使用正则表达式,这将帮助您识别和查找字符串中的模式。这里是一个关于java中正则表达式的好教程http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

+0

但如果格式不保持不变? getTime方法肯定会搜索日期开始的索引。除了正则表达式,还有其他方法可以做到吗? – mistermjtek

+0

就像我在我的回答中提到的,如果您的字符串格式发生变化,您可以使用正则表达式。这取决于你的字符串。例如,如果你想搜索日期字符串,并且你知道日期总是以方括号[]开始和结束,并且在日期之前不会是随机大括号,你可以使用类似s.substring(s.indexOf(“[”), s.indexOf(“]”))并避免使用正则表达式。但是如果你的字符串真的是随机的,甚至可能在日期子字符串之前有方括号,那么这可能不起作用,你将不得不选择REGEX,为日期字符串定义一个模式并在输入中搜索它。 –

1

如果ABSO鲁特想自己写,我建议你开始刷你的regular expressions

但是,对于这种类型的任务,我会推荐使用日志分析工具,如logstash