java - 在 Java 中使用非空白字符时 split 方法如何工作?

标签 java arrays regex split

我不明白 String 类中的 split() 方法在使用 regex (非空白字符)时如何工作。我在互联网上找到了一些部分答案,但我仍然不明白。这是我的代码:

public class Test {
    public static void main(String[] args) {
        String myX = "x xx ";
        String[] x = myX.split("\\S");

        for (String s : x){
            System.out.print("\"" + s + "\", ");
        }
        System.out.println(x.length);
    }
}

我的逻辑如下:

第一个 'x' 是非空格吗?是的,所以在数组中我们应该有 ""
' ' 是非空白吗?不,所以在数组中我们应该有 ""
第二个 'x' 是非空格吗?是的,所以在数组中我们应该有 ""
第三个 'x' 是非空格吗?是的,所以在数组中我们应该有 ""
最后一个 ' ' 是非空格吗?不,所以在数组中我们应该有 ""

在我看来,数组应该如下所示:["", "", "", "", ""]

为什么数组看起来像 ["", "", "", ""] 并且长度为 4 而不是 5?中间有 2x,而不是数组中只出现一个。

谢谢!

最佳答案

以下是解释 split() 方法如何应用分隔符的直观方式:

^x xx $
[    ""    |   " "   |    ""    |   " "   ]
^  nothing ^  space  ^ nothing  ^  space  ^
start    1st x      2nd x      3rd x      end of string

这会产生您观察到的数组输出:

["", " ", "", " "]

关于java - 在 Java 中使用非空白字符时 split 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40785451/

相关文章:

JavaFX 图形 "blurred"或消除锯齿? (没有使用效果)

java - IOUtils.copy 和 IOUtils.copyLarge 非常慢

arrays - 如何删除 bash 数组中的确切元素?

java - 正则表达式获取 1) 而不仅仅是数字

regex - Linux 脚本 + 正则表达式

java - 如何从 Java/JNDI 修改 OpenLDAP 中的操作属性?

java - Java 中多线程的替代方案

c# - 将整数数组转换为逗号分隔的字符串

c++ - 我怎样才能打印这个数组的四个角?以及如何确定列是否严格升序

java - 引号内的数字 - 正则表达式