Java 字符串拆分方法在开始时留下空标记

Java 字符串拆分方法在开始时留下空标记,java,regex,Java,Regex,我有一根绳子 String text="abc19xyz87nag"; 我只需要从中获取数字,因此我应用了“\\D+”regex,如下所示 String text="abc19xyz87nag"; String[] tks=text.split("\\D+"); 但是我在数组的开头看到一个空标记 我是如何找到下面两个解决方案的 使用扫描仪 Scanner sc = new Scanner(text).useDelimiter("\\D+"); while(sc.hasNex

我有一根绳子

String text="abc19xyz87nag";
我只需要从中获取数字,因此我应用了
“\\D+”
regex,如下所示

String text="abc19xyz87nag";
String[] tks=text.split("\\D+");
但是我在数组的开头看到一个空标记

我是如何找到下面两个解决方案的

使用扫描仪

Scanner sc = new Scanner(text).useDelimiter("\\D+");
        while(sc.hasNext()) {
            System.out.println(sc.nextInt());
        }
使用模式匹配器

Matcher m = Pattern.compile("\\d+").matcher(text);
        while (m.find()) { 
             System.out.println(m.group());
            }
那么为什么字符串拆分会在开始时留下空标记呢?
我需要更改正则表达式以避免它吗?

非常感谢您的帮助

您的正则表达式应该是

[^\d]

希望它有帮助

您可以执行一些验证来删除空的
字符串

String s = "smt-ing we want to split");
StringTokenizer st = new StringTokenizer();
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
    String text="abc19xyz87nag";
    String[] tks=text.split("\\D+");
    List<String> numList=new ArrayList<>();
    for(String i:tks){
       if(!"".equals(i)){
           numList.add(i);
       }
    }
String text=“abc19xyz87nag”;
字符串[]tks=text.split(\\D+);
List numList=new ArrayList();
用于(字符串i:tks){
如果(!“”.等于(i)){
numList.添加(i);
}
}

不在开始时丢弃空字符串是设计决策。其基本原理是split()经常与以下数据一起使用

item1, item2, item3
(这里的定界符是“,”),您希望将非空项保持在它们的位置

现在,假设您使用上面的3个项目分析行,其中第一个和最后一个是可选的。如果split将丢弃前导和尾随的空字符串,并返回2个元素,则无法确定输入是什么:

, item2, item3


通过仅在结尾处丢弃空字符串,您知道每个非空字符串都位于其正确的位置。

另请参见@RohitJain-我必须对regex所做的更改并没有在副本中提供。把它看清楚,看到底。我想你没有明白我的问题……String test=“1324asdasd9846”;字符串[]tks=test.split(\\D+);对于(int i=0;i
item1, item2