我不想在特殊字符(如「」,{},[])之間進行標記,我該怎麼辦?適用於特殊字符的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()'和正則表達式。 –