2017-03-09 118 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