【问题标题】:java String split, empty Array [duplicate]java字符串拆分,空数组[重复]
【发布时间】:2014-05-16 16:54:16
【问题描述】:

我尝试将字符串“1.1”拆分为 2 个新字符串:

String[] array = "1.1".split(".");
System.out.println(array[0]);

但我收到了java.lang.ArrayIndexOutOfBoundsException

为什么?

【问题讨论】:

  • 这个问题被问了很多次。例如查看this
  • 句号是正则表达式中的特殊字符。所以使用"1.1".split("\\.")
  • 顺便说一句,对于这些情况,我建议"1.1".split(Pattern.quote(".")),以提高可读性。
  • 在有用的答案中添加一些内容:实际上,首先拆分会产生 4 个匹配项,每个匹配项都是一个空字符串。点匹配任何字符,因此拆分查找第一个“1”前面的空字符串,然后查找“1”和“.”之间的空字符串,依此类推。但根据method's documentation,尾随的空字符串不包括在结果数组中。因此生成的字符串数组本身的长度为 0。

标签: java string split


【解决方案1】:

你需要转义点。

String[] array = "1.1".split("\\.");
System.out.println(array[0]);

如果您查看doc,您会发现 split 方法接受正则表达式。

在正则表达式中. 表示除换行之外的任何字符。

public String[] split(String regex) {
        return split(regex, 0);
    }

【讨论】:

    【解决方案2】:

    你必须使用"1.1".split("\\.")

    【讨论】:

      【解决方案3】:

      试试 String[] array = "1.1".split("\\.");

      【讨论】:

        【解决方案4】:

        您需要转义 . with \\ 以便它不会被视为正则表达式元字符,因为 split 需要正则表达式。你可以这样尝试:

        String[] array = "1.1".split("\\.");
        System.out.println(array[0]);
        

        【讨论】:

          【解决方案5】:

          split 采用正则表达式。点字符. 用于匹配正则表达式中的任何字符,因此除非字符本身被转义,否则数组将为空

          String[] array = "1.1".split("\\.");
          

          【讨论】:

          • +1 用于解释点字符的用途(即使它在这里是偶然使用的)
          猜你喜欢
          • 1970-01-01
          • 2016-08-04
          • 2013-09-01
          • 2013-01-03
          • 1970-01-01
          • 2016-03-22
          • 2015-05-12
          • 2013-04-18
          • 2019-07-07
          相关资源
          最近更新 更多