Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中按数字拆分数组_Java_Regex_String - Fatal编程技术网

java中按数字拆分数组

java中按数字拆分数组,java,regex,string,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。

我想从数字的起始位置分离一个字符串

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

像这样做:

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));
}
记住导入java.util.regex.*


如果确实需要使用
split()
执行此操作:

stringuri=“/api/content/9011”;

String[]splitUri=uri.split((?
ArrayIndexOutOfBoundsException
发生,因为从split方法返回的
array
只有一个条目。通过正则表达式,您正在“擦除”数字。 Split创建一个
数组
,但如果后面没有条目,则不会添加空条目。只需使用
字符串uri=“/api/content/9011a”
进行调试,您将得到一个长度为5的数组:

  • /api/内容/
  • “”
  • “”
  • “”
  • a

  • 因此,作为正则表达式,您应该使用
    ”(?这应该适合您

     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
    

    如果您的字符串是
    “/api/content/9011/aaa/55/vvv”
    输出应该是什么样子呢?字符串将是/api/content/{id}因此,数字应该与字符串@YCF_分离,并读取拆分方法的JavaDoc:。拆分方法围绕匹配的正则表达式进行拆分。因此,正则表达式将不会成为拆分数组的一部分。(a:b拆分者:返回a,b。不是a,:,b)无论如何,如果你的字符串总是以/api/content/{id}的形式出现,那么提取数字的最简单的方法就是:uri.substring(13)如果你的字符串总是以/api/content/{id}的形式出现,并且你想将“/api/content/”和“{id}”分开,你可以简单地执行字符串s1=uri.substring(0,uri.lastIndexOf(“/”)+1);字符串s2=uri.substring(uri.lastIndexOf(“/”)+1);
     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