Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拆分和排序字符串数组_Java_Arrays_String - Fatal编程技术网

Java 拆分和排序字符串数组

Java 拆分和排序字符串数组,java,arrays,string,Java,Arrays,String,我正在尝试拆分和排序此长日志字符串: "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)"" 我目前的代码显然不起作用,我正试图找出任何方法来改进我的代码,或者使用不同的方法来解决这个问题。它获得了许多日志条目的数组,包括上面的一个。我主

我正在尝试拆分和排序此长日志字符串:

"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如果您确实想自己编写,我建议您开始重新学习


但是,对于这种类型的任务,我建议使用日志分析工具,例如。

假设您提供的字符串格式始终保持不变,例如
140.184.37.105---[08/Aug/2001:21:06:36-0300]“GET/~csc226/outline.htm HTTP/1.0”200 9748http://cs.stmarys.ca/~csc226/“Mozilla/4.73[en](WinNT;U)“

它实际上非常简单,您只需要熟悉java中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中正则表达式的很好教程

如果你清楚地定义了你要做的事情,那么我们有更好的机会帮助你。你甚至有可能对如何解决这个问题有更好的想法。所以你想按日期对它们进行排序,或者你也想修改内容(更改顺序)?为什么你发布的解决方案不起作用?我只是尝试对字符串进行排序,而不是修改字符串中的任何内容。我不知道如何将字符串的特定部分存储到变量中。例如,我不知道如何将日期存储到date变量中。但是如果格式不保持不变呢?getTime方法一定要搜索日期开始的索引。除了正则表达式,还有其他方法吗?就像我在回答中提到的,如果字符串格式改变,你可以使用正则表达式。这取决于你的绳子。例如,如果您想搜索日期字符串,并且知道日期总是以方括号[]开始和结束,并且在日期之前不会有随机大括号,那么可以使用类似s.substring(s.indexOf(“[”),s.indexOf(“]))的内容并避免使用正则表达式。但是如果你的字符串真的是随机的,甚至在日期子字符串之前也可能有大括号,那么这可能不起作用,你必须选择正则表达式,为日期字符串定义一个模式并在输入中搜索它。