【问题标题】:Java : split a string that containing special charactersJava:拆分包含特殊字符的字符串
【发布时间】:2013-04-30 10:25:26
【问题描述】:

我有一个类似||81|||01|| 的字符串,我想用| 符号分割字符串。

我是这样做的,

String str = "||81|||01||";
System.out.println(str .split("\\|").length); //printing 6 . But I am expecting 8

这段代码有什么问题? |我怎样才能用那个字符分割这个字符串,以便我得到预期的长度(8)?;

【问题讨论】:

  • 为什么你认为 8 是预期的结果?
  • @NoobUnChained 如果有n 分隔符,则字符串应拆分为n+1 部分。在给定的输入中有7 管道,所以应该有8 结果。
  • 在开头和结尾引入一个空格:" ||81|||01|| "得到预期的结果;)
  • @NoobUnChained 这是一个奇怪的 hack,看到 Java 为您提供了使用 split 的附加参数来更改行为的选项,你不觉得吗?
  • @NoobUnChained:不。你会得到不同的结果(空格而不是空字符串)。

标签: java regex string


【解决方案1】:

使用split("\\|")split("\\|", 0) 相同,其中限制参数0 告诉函数“省略尾随空字符串”。所以你错过了最后两个空字符串。使用双参数版本并提供一个负数来获取所有部分(甚至是尾随的空部分):

str.split("\\|", -1)

【讨论】:

  • 亲爱的投票者,您愿意发表评论以便我改进答案吗?
【解决方案2】:

打印:

System.out.println(Arrays.toString(str.split("\\|")));

你就会明白为什么打印 6。

你可以尝试使用 public String[] split(String regex, int limit) 做你想做的事:

limit参数控制模式的次数 应用,因此会影响结果数组的长度。

所以你应该这样做:

System.out.println(str.split("\\|", -1).length);

现在,打印数组将打印:

[, , 81, , , 01, , ] 如您所愿。

【讨论】:

    【解决方案3】:

    您还可以使用 string.split(Pattern.quote("|"),-1) 将字符串拆分为特殊字符。

    【讨论】:

    • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
    • 拆分“||81|||01||”的示例基于特殊字符“|”那么你可以使用String s="||81|||01||"; String array[]=s.split(Pattern.quote("|"),-1) 这样得到的数组长度为8。
    【解决方案4】:

    你需要使用:

    str.split("\\|", -1)
    

    第二个参数是limit。来自 javadoc:

    limit参数控制模式的次数 应用,因此会影响结果数组的长度。如果 限制 n 大于零,则模式将应用于 大多数 n - 1 次,数组的长度将不大于 n,并且 数组的最后一个条目将包含最后匹配之外的所有输入 分隔符。如果 n 为非正数,则该模式将应用为 尽可能多次,并且数组可以有任何长度。如果 n 为零 那么该模式将被应用尽可能多的次数,数组 可以有任意长度,并且尾随的空字符串将被丢弃。

    【讨论】:

      【解决方案5】:

      str.split("\\|", -1) 将做必要的事情。 可能重复:Here

      【讨论】:

        【解决方案6】:

        String str = "||81|||01||"; System.out.println(str.split("\\|", 8).length);

        split 的第二个参数指定最大匹配数。单参数 split 就像调用 split(str, 0) 会忽略尾随字符串。有关详细说明,请参阅两者的 javadoc。

        【讨论】:

        • 使用8 非常不灵活。如果您只使用否定论点(如其他答案),您将简单地得到所有部分,无论| 中有多少str
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 2022-11-13
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多