【问题标题】:having trouble with arrays and maybe split数组有问题,可能会分裂
【发布时间】:2014-03-14 10:48:27
【问题描述】:
String realstring = "&&&.&&&&";
Double value = 555.55555;
String[] arraystring = realstring.split(".");
String stringvalue = String.valueof(value);
String [] valuearrayed = stringvalue.split(".");
System.out.println(arraystring[0]);

对不起,如果它看起来不好。在我的手机上重写。我不断在System.out.println 收到ArrayIndexOutOfBoundsException: 0。我已经看过了,无法弄清楚。感谢您的帮助。

【问题讨论】:

  • split 将正则表达式作为参数,而不是文字字符串。你必须逃避这个点。或者你也可以简单地使用 indexOf('.') 和 substring().
  • @JBNizet 我觉得这应该是答案:)
  • 我屈服于压力:)
  • @T.J.Crowder 你确定吗?我从那个链接得到java.lang.ArrayIndexOutOfBoundsException: 0
  • @PaulBellora:现在,我也是。(评论已删除,但这是链接:ideone.com/mCBYAV)真奇怪。嗯,IDEOne 的用户界面是如此脱节,我可能误读了它。 (仍然是一个非常方便的工具。)奇怪的是它返回一个空数组,但我刚刚阅读了您现在已删除的评论(“在. 上拆分意味着在任何字符上拆分,默认情况下split 会留下尾随的空字符串,在 JB 的回答中,在任何字符上拆分都会给你 only 空字符串”或类似的东西),这很好地解释了它!

标签: java arrays split


【解决方案1】:

split() 将正则表达式作为参数,而不是文字字符串。您必须转义点:

string.split("\\.");

string.split(Pattern.quote("."));

或者您也可以简单地使用indexOf('.')substring() 来获取字符串的两个部分。

如果目标是获得双精度数的整数部分,您也可以简单地使用

long truncated = (long) doubleValue;

【讨论】:

  • 但是为什么数组是空的?这是谜题的另一半 :)
  • 我会让你为此添加一个答案。我讨厌正则表达式:)
  • 要拆分,我更喜欢使用Guava的Splitter,它更符合逻辑、可预测、高效且易于使用:code.google.com/p/guava-libraries/wiki/…
【解决方案2】:

点 (.) 是一个特殊字符,因此您需要对其进行转义。

String realstring = "&&&.&&&&";         
String[] partsOfString = realstring.split("\\.");
String part1 = partsOfString[0];
String part2 = partsOfString[1];
System.out.println(part1);

这将打印

的预期结果

&&&

测试给定的字符串是否包含该字符也很方便。你可以这样做:

if (string.contains(".")) {
    // Split it.
} else {
    throw new IllegalArgumentException("String " + string + " does not contain .");
}

【讨论】:

    【解决方案3】:

    split 使用正则表达式作为参数,并且在正则表达式中 . 表示“除行分隔符之外的任何字符”,因此您可以预期 "a.bc".split(".") 会创建像 ["","","","",""] 这样的空字符串数组。它没有发生的唯一原因是因为(来自splitjavadoc

    此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。 因此结果数组中不包含尾随的空字符串

    所以因为所有字符串都是空的,所以你会得到空数组(那是因为你看到了ArrayIndexOutOfBoundsException)。

    要关闭删除机制,您必须使用带有否定 limitsplit(regex, limit) 版本。

    要拆分. 文字,您需要使用\. 对其进行转义(在Java 中需要将其写为"\\.",因为\ 也是字符串元字符)或[.] 或其他正则表达式机制。

    【讨论】:

    • 感谢您的详细解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多