在java中,咱們經常須要對字符串進行分割,使用split方法把字符串按照指定的分割符進行分割,而後返回字符串數組,下面是string.split的用法實例及注意事項:java
public class StringSplit {正則表達式
public static void main(String[] args) {算法
String sourceStr = "1,2,3,4,5";數組
String[] sourceStrArray = sourceStr.split(",");ide
for (int i = 0; i < sourceStrArray.length; i++) {性能
System.out.println(sourceStrArray[i]);測試
}this
// 最多分割出3個字符串spa
int maxSplit = 3;.net
sourceStrArray = sourceStr.split(",", maxSplit);
for (int i = 0; i < sourceStrArray.length; i++) {
System.out.println(sourceStrArray[i]);
}
}
}
輸出結果:
split 的實現直接調用的 matcher 類的 split 的方法。在使用String.split方法分隔字符串時,分隔符若是用到一些特殊字符,可能會得不到咱們預期的結果。在正則表達式中有特殊的含義的字符,咱們使用的時候必須進行轉義,示例:
public class StringSplit {
public static void main(String[] args) {
String value = "192.168.128.33";
// 注意要加\\,要不出不來,yeah
String[] names = value.split("\\.");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
}
split分隔符總結
1.字符"|","*","+"都得加上轉義字符,前面加上"\\"。2.而若是是"\",那麼就得寫成"\\\\"。3.若是一個字符串中有多個分隔符,能夠用"|"做爲連字符。
好比:String str = "Java string-split#test",能夠用Str.split(" |-|#")把每一個字符串分開。這樣就把字符串分紅了3個子字符串。
java.util.Tokenizer JDK 1.0 or later
StringTokenizer
StringTokenizer 類容許應用程序將字符串分解爲標記。StringTokenizer 是出於兼容性的緣由而被保留的遺留類(雖然在新代碼中並不鼓勵使用它)。建議全部尋求此功能的人使用 String 的 split 方法或 java.util.regex 包。
代碼示例
public class StringSplit {
public static void main(String[] args) {
String ip = "192.168.128.33";
StringTokenizer token=new StringTokenizer(ip,".");
while(token.hasMoreElements()){
System.out.print(token.nextToken()+" ");
}
}
}
可是StringTokenizer對於字符串"192.168..33"的分割,返回的字符串數組只有3個元素,對於兩個分隔符之間的空字符串會忽略,這個要慎重使用。
可是String.split(String.split是用正則表達式匹配,因此不使用KMP字符串匹配算法)用的都是按順序遍歷的算法,時間複雜度O(m*n),較高,因此性能上,StringTokenizer好不少,對於頻繁使用字符串分割的應用,例如etl數據處理,使用StringTokenizer性能能夠提升不少。
小經驗分享:
一、分隔符爲「.」(無輸出),「|」(不能獲得正確結果)轉義字符時,「*」,「+」時出錯拋出異常,都必須在前面加必須得加"\\",如split(\\|);
二、若是用"\"做爲分隔,就得寫成這樣:String.split("\\\\"),由於在Java中是用"\\"來表示"\"的,字符串得寫成這樣:String Str="a\\b\\c";
轉義字符,必須得加"\\";
三、若是在一個字符串中有多個分隔符,能夠用"|"做爲連字符,好比:String str="Java string-split#test",能夠用Str.split(" |-|#")把每一個字符串分開;
使用String.split方法時要注意的問題
在使用String.split方法分隔字符串時,分隔符若是用到一些特殊字符,可能會得不到咱們預期的結果。
咱們看jdk doc中說明
public String[] split(String regex)
Splits this string around matches of the given regular expression.
參數regex是一個 regular-expression的匹配模式而不是一個簡單的String,他對一些特殊的字符可能會出現你預想不到的結果,好比測試下面的代碼:
用豎線 | 分隔字符串,你將得不到預期的結果
String[] aa = "aaa|bbb|ccc".split("|");
//String[] aa = "aaa|bbb|ccc".split("\\|"); 這樣才能獲得正確的字符串結果
用豎 * 分隔字符串運行將拋出java.util.regex.PatternSyntaxException異常,用加號 + 也是如此。
String[] aa = "aaa*bbb*ccc".split("*");
//String[] aa = "aaa|bbb|ccc".split("\\*"); 這樣才能獲得正確的字符串結果
顯然,+ * 不是有效的模式匹配規則表達式,用"\\*" "\\+"轉義後便可獲得正確的字符串結果。
"|" 分隔串時雖然可以執行,可是卻不是預期的目的,獲得的是每一個字符的分割,而不是字符串,"\\|"轉義後便可獲得正確的字符串結果。
還有若是想在串中使用"\"字符,則也須要轉義.首先要表達"aaaa\bbbb"這個串就應該用"aaaa\\bbbb",若是要分隔就應該這樣才能獲得正確結果:
String[] aa = "aaa\\bbb\\bccc".split("\\\\");
注意當用"."分隔的時候, 要用"[.]" 進行分隔!
PS:JAVA新手交流羣:457036818,歡迎你們來交流JAVA相關問題