我不想在特殊字符(如“”,{},[])之间进行标记,我该怎么办?适用于特殊字符的Java StringTokenizer
String: "192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] 'GET /cgi-bin/try/ HTTP/1.0' 200 3395"
,我想这样的输出:
192.168.2.20
28/Jul/2006:10:27:10 -0300
GET /cgi-bin/try/ HTTP/1.0
200 3395
我的代码:
String rawData= "192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] 'GET /cgi-bin/try/ HTTP/1.0' 200 3395";
int i=0;
String[] s1=new String[100];
String delim = " ";
StringTokenizer tok = new StringTokenizer(rawData, delim, true);
boolean expectDelim = false;
while (tok.hasMoreTokens()) {
String token = tok.nextToken();
if (delim.equals(token)) {
if (expectDelim) {
expectDelim = false;
continue;
} else {
token = null;
}
}
s1[i]=token;
System.out.println(s1[i]);
i+=1;
expectDelim = true;
}
}
输出:
192.168.2.20
-
-
[28/Jul/2006:10:27:10
-0300]
'GET
/cgi-bin/try/
HTTP/1.0'
200
3395
我可以为这个日志做到这一点。但是我想用我的代码来处理所有的apache日志。我怎样才能做到这一点 ?
是否将多个分隔符传递给StringTokenizer构造函数解决您的问题? '新的StringTokenizer(rawData,“ - []''”);' – anycard
不,我不这么认为。对于这个问题,你可以使用字符串标记或简单的字符串拆分方法,并创建解析一行并在循环中运行的函数。 – RMachnik
从[Javadoc for'StringTokenizer'](http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html) - _StringTokenizer是为保持兼容性原因而保留的遗留类,尽管它的使用在新代码中是不鼓励的。使用'String.split()'和正则表达式。 –