java - 字符串分割方法在开头留下空标记

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

那么为什么字符串分割在开头留下空标记?
我需要更改正则表达式来避免它吗?
感谢任何帮助

最佳答案

在开始时不丢弃空字符串是一个设计决定。基本原理是 split() 经常与像这样的数据一起使用

item1, item2, item3

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

现在,假设您解析包含 3 个项目的行(如上面所示),其中第一个和最后一个是可选的。如果 split 会丢弃前导和尾随空字符串,并且返回 2 个元素,则您无法决定输入是否为:

, item2, item3

item1, item2

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

关于java - 字符串分割方法在开头留下空标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21254940/

相关文章:

regex - Outlook 2010 中的未送达报告和 VBA 脚本

c# - 在 * 字符正则表达式上拆分字符串

java - 如何使用 split() 正确分割文件名的字符串输入?

php - 正则表达式 X/Y 坐标

java - 快速排序算法抛出 StackOverflowException

java - 如何使用另一个线程停止从标准输入流扫描的线程?

java - 我如何使用 Java 在 Linux 中找到计算机类型?

java - 使用 ASM (5.x) : howto? 在字节代码中检测运行时的递归方法调用

java - 没有类型参数的继承 Controller 方法不会与 RequestMapping 进行映射

php - 用于表情符号的复杂 PHP/Perl 正则表达式