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(“]))的内容并避免使用正则表达式。但是如果你的字符串真的是随机的,甚至在日期子字符串之前也可能有大括号,那么这可能不起作用,你必须选择正则表达式,为日期字符串定义一个模式并在输入中搜索它。