一、問題如下:
1、先對一個已有字符串進行操作,使用 ; 進行分割:
//示例字符串 String string="sr1.db1.tb1.df1;sr2.db2.tb2.df2;"; //先用;進行分割 String a[]=string.split(";"); for(String str:a) { System.out.println(str); }
此處切割之后的結果是沒有問題的,結果為:
2、對切割完的結果再用 . 進行切割:
//示例字符串 String string="sr1.db1.tb1.df1;sr2.db2.tb2.df2;"; //先用;進行分割 String a[]=string.split(";"); for(String str:a) { String b[]=str.split("."); for(String str2:b) { System.out.println(str2); } }
此時就會報錯,無法得出結果。
二、問題解析
split方法的參數是正則表達式,在使用字符或字符串作切割符時要注意對某些字符做轉碼。
就像之前問題里使用 ; 進行切割就沒什么問題,但是使用 . 進行切割就會出現報錯。 . 在正則表達式中表示任意字符,如果要通過.號做分割,則需要使用雙斜杠或者Pattern.quote()方法對其進行轉碼:
split("\\.")
split(Pattern.quote("."))
這樣問題就得到了解決:
//示例字符串 String string="sr1.db1.tb1.df1;sr2.db2.tb2.df2;"; //先用;進行分割 String a[]=string.split(";"); for(String str:a) { String b[]=str.split(Pattern.quote(".")); for(String str2:b) { System.out.println(str2); } }
結果如下: