2017-03-09 157 views
0

我想從數字開始的位置分開一個字符串。在java中按數字拆分數組

String uri = "/api/content/9011"; 
String[] splitUri = uri.split("[0-9]"); 
System.out.println(splitUri[0]); 
System.out.println(splitUri[1]); 

當我運行這段代碼就說明我ArrayIndexOutOfBoundsException,可有一個人告訴我爲什麼?我想在第0個索引=/api/content/ 和第一個索引= 9011處存儲。我甚至希望包含第一個數字。我該怎麼辦 ??

+0

如果你的字符串是'「/ api/content/9011/aaa/55/vvv」'輸出應該是什麼樣子? –

+0

字符串將是/ api/content/{id}它不會是除此之外的任何東西。所以數字應與字符串分離@YCF_L –

+0

閱讀split方法的JavaDoc:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java。 lang.String)。 split方法在**匹配的正則表達式周圍分割**。因此,正則表達式不會成爲分割數組的一部分。 (a:b分割:返回a,b。不是a:,b) –

回答

5

這樣做:

String line = "/api/content/9011"; 
Pattern pattern = Pattern.compile("(/api/content/)([0-9]*)"); 
Matcher matcher = pattern.matcher(line); 
while(matcher.find()) { 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
} 

記住要import java.util.regex.*;


如果你真的需要split()做到這一點:

String uri = "/api/content/9011"; 
String[] splitUri = uri.split("(?<=\\/)(?=[0-9])"); 
System.out.println(splitUri[0]); 
System.out.println(splitUri[1]); 

但是,請閱讀here如何拆分作品。

0

ArrayIndexOutOfBoundsException發生,因爲從split方法返回的array只有一個條目。通過你的正則表達式,你正在「擦除」數字。 Split會創建一個array,但如果後面沒有條目,則不會添加空條目。只是String uri = "/api/content/9011a";調試,你會得到長度爲5的數組:

  1. /API /內容/
  2. 「」
  3. 「」
  4. 「」
  5. 一個

所以作爲正則表達式,你應該使用"(?<=\\/)(?=[0-9])"。它使用前視和後視,如解釋here

0

這應該適合你。

String uri = "/api/content/9011"; 
String[] splitUri = uri.split("/"); 
System.out.println(splitUri[0]); // "" 
System.out.println(splitUri[1]); // api 
System.out.println(splitUri[2]); // content 
System.out.println(splitUri[3]); // 9011