【问题标题】:why an empty array gets printed out when trying to split a string using split(".") [duplicate]为什么在尝试使用 split(".") 拆分字符串时会打印出一个空数组 [重复]
【发布时间】:2016-04-12 06:38:21
【问题描述】:

我正在试验 String 类的实例方法 split()。但是,当我使用 . 作为 split() 方法的参数并尝试使用 Arrays.toString(s2) 将其打印出来时,只会打印出一个空数组。

为什么会这样?

String s1 = "hello.world";
String[] s2 = s1.split(".");
System.out.println(Arrays.toString(s2));

【问题讨论】:

    标签: java arrays string split


    【解决方案1】:

    这种“奇怪”行为是因为你没有在正则表达式中转义点......即你需要做s1.split("\\.");而不是s1.split(".");

    示例:

    public static void main(String[] args) {
            String s1 = "hello.world";
            String[] s2 = s1.split("\\.");
            System.out.println(Arrays.toString(s2));
    }
    

    只是为了学习过程,正则表达式中的点属于已知元字符,每次您尝试将正则表达式与它们一起使用时,它们都必须转义...

    查看tutorial 了解更多信息...

    有 12 个具有特殊含义的字符:反斜杠 \、 插入符号 ^、美元符号 $、句点或点 .、竖线或 管道符号 |、问号 ?、星号或星号 *、加号 符号 +、左括号 (、右括号 ) 和 左方括号 [,左大括号 {,这些特殊 字符通常被称为“元字符”。

    【讨论】:

    • 为什么我必须在这里使用转义\?您能否指出一些关于此的文章或文档?再次感谢您的帮助
    • 完成...这些特殊字符的列表已在更新中,并且还有指向教程的链接
    【解决方案2】:

    根据APIsplit 方法将正则表达式作为参数。碰巧在正则表达式语法中,句点表示 任何字符,因此您将拆分每个字符,这就是您得到空数组的原因。

    要解决此问题,您需要像这样转义句点:.split("\\.")。额外的\ 指示正则表达式引擎将句点视为实际字符,没有任何特殊含义。

    【讨论】:

      【解决方案3】:

      您可以使用这些方法转义特殊字符

      1.String test = "abc.xyz";
      String[] output1 = test.split("\.");

      2.String test = "abc.xyz";
      String[] output2 = test.split(Pattern.quote("."));

      你可以参考 split a string

      【讨论】:

        【解决方案4】:

        。是正则表达式中的一个特殊字符,split 接受正则表达式作为参数,你应该转义它。

        【讨论】:

          【解决方案5】:

          试试看,

           String[] s2 = s1.split("\\.");
          

          有12个具有特殊含义的字符:反斜杠\、插入符号^、美元符号$、句点或点.、竖线或竖线符号|、问号标记?、星号或星号*、加号+、左括号(、右括号)、左方括号[、左大括号{ , 这些特殊字符通常被称为“元字符”。

          如果您想在正则表达式中使用这些字符中的任何一个作为文字,您需要使用反斜杠对其进行转义。在文字 Java 字符串中,反斜杠是转义字符。文字字符串"\\" 是一个反斜杠。

          【讨论】:

            猜你喜欢
            • 2023-03-11
            • 1970-01-01
            • 1970-01-01
            • 2013-05-14
            • 1970-01-01
            • 2018-06-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-22
            相关资源
            最近更新 更多