我想将数字与数字开始的字符串分开。
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 :(得分: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的数组:
因此,正则表达式应该使用"(?<=\\/)(?=[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