2014-06-10 7 views
0

Je suis en train de diviser et de trier cette longue chaîne de blog:Split et Tri chaîne Tableau

"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)"" 

Mon code actuel ne fonctionne pas vraiment et je suis en train de trouver des moyens d'améliorer mon code ou utilisez une méthode différente pour résoudre ce problème. Il obtient un tableau de nombreuses entrées de blog, y compris celle ci-dessus. Je suis surtout essayer de comprendre comment trier le tableau pour afficher la date de 8 Août, l'adresse IP comme 140.184.37.105, etc.

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")); 
    } 

Je suis désolé si cette question est inconsidérée mais je m nouveau et ne sais pas comment aborder ou résoudre ce problème.

Le résultat devrait ressembler à ceci:

ip Adresse: 140.184.37.105

Date et heure entre crochets: [08/Août/2001: 21: 06: 36 -0300]

la page demandée guillemets: "GET /~csc226/outline.htm HTTP/1.0"

code d'état HTTP renvoyé au client (200 = succès): 200

+0

Si vous définissez clairement ce que vous essayez de faire, il y a une meilleure chance que nous pouvons vous aider. Il y a même une chance que vous ayez une meilleure idée de la façon de le résoudre. – shmosel

+0

Donc, vous voulez les trier par date, ou voulez-vous aussi modifier le contenu aussi bien (changer l'ordre)? – npinti

+0

Pourquoi la solution que vous avez publiée ne fonctionne pas? –

Répondre

0

En supposant que le format de chaîne que vous avez donné restera toujours même, comme ce 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)"

Sa fait très simple, il vous suffit de se familiariser avec les méthodes de la classe String en java http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Par exemple: -

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 

} 

Si vous changez de format de chaîne alors vous pouvez aller avec regex, qui vous aidera à identifier et à trouver des modèles dans votre chaîne. Voici un bon tutoriel sur regex en Java http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

+0

mais que faire si le format ne reste pas le même? La méthode getTime devra certainement rechercher l'index du début de la date. Et y a-t-il un autre moyen de le faire autre que regex? – mistermjtek

+0

Comme je l'ai mentionné dans ma réponse, Si votre format de chaîne change, vous pouvez utiliser regex. Cela dépend de votre chaîne. Par exemple, si vous souhaitez rechercher chaîne de date et vous savez la date sera toujours commencer et finir dans des crochets [] et il ne sera pas en accolades au hasard avant la date, vous pouvez utiliser quelque chose comme s.substring (s.indexOf (« [ »), s.indexOf ("]")) et évitez regex. Mais si votre chaîne est vraiment accolades au hasard et il y a place peut-être même avant sous-chaîne de date, cela pourrait ne pas fonctionner et vous devrez opter pour REGEX, définir un modèle pour la date String et la recherche dans l'entrée. –

1

Si vous Abso Je veux que vous commenciez à vous brosser les dents sur votre regular expressions.

Cependant, pour ce type de tâche, je vous conseille d'utiliser un outil d'analyse de journal comme logstash.