在java

时间:2017-03-09 12:49:04

标签: java regex string

我想将数字与数字开始的字符串分开。

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.我甚至想要第一个数字包含。我该怎么办?

3 个答案:

答案 0 :(得分: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如何进行拆分。

答案 1 :(得分:0)

ArrayIndexOutOfBoundsException发生,因为split-method返回的array只有一个条目。通过你的正则表达式,你正在“删除”数字。 拆分创建array但如果后面没有条目,则不会添加空条目。只需使用String uri = "/api/content/9011a";进行调试,您将获得一个长度为5的数组:

  1. / API /内容/
  2. “”
  3. “”
  4. “”
  5. 一个
  6. 因此,正则表达式应该使用"(?<=\\/)(?=[0-9])"。它使用了前瞻和后瞻,如here

    所述

答案 2 :(得分: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