字符串拆分方法在开头留下空标记

时间:2014-01-21 10:05:58

标签: java regex

我有一个字符串

String text="abc19xyz87nag";

我只需要从中获取数字,因此我应用了"\\D+"正则表达式,如下所示,

String text="abc19xyz87nag";
String[] tks=text.split("\\D+");

但是我在数组的开头看到一个空标记 enter image description here

我怎么能找到另外两个解决方案,如下所示

使用扫描仪

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());
            }

那么为什么字符串拆分在开头留下空标记?
我是否需要更改正则表达式以避免它? 任何帮助表示赞赏

4 个答案:

答案 0 :(得分:1)

设计决定不要在开头丢弃空字符串。基本原理是split()通常与

等数据一起使用
item1, item2, item3

(此处分隔符为',')并且您希望将非空项目保留在其位置。

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

, item2, item3

item1, item2

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

答案 1 :(得分:0)

你的正则表达式应该像

[^\d]

希望有所帮助

答案 2 :(得分:0)

String s = "smt-ing we want to split");
StringTokenizer st = new StringTokenizer();
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}

答案 3 :(得分:0)

您可以执行一些验证以删除该空String

    String text="abc19xyz87nag";
    String[] tks=text.split("\\D+");
    List<String> numList=new ArrayList<>();
    for(String i:tks){
       if(!"".equals(i)){
           numList.add(i);
       }
    }