2014-06-10 29 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