有阵列的麻烦,也许分裂

时间:2014-02-14 21:49:46

标签: java arrays split

String realstring = "&&&.&&&&";
Double value = 555.55555;
String[] arraystring = realstring.split(".");
String stringvalue = String.valueof(value);
String [] valuearrayed = stringvalue.split(".");
System.out.println(arraystring[0]);

抱歉,如果它看起来很糟糕。在我的手机上重写了。我一直在ArrayIndexOutOfBoundsException: 0获得System.out.println。我看了,无法搞清楚。谢谢你的帮助。

3 个答案:

答案 0 :(得分:8)

split()将regexp作为参数,而不是文字字符串。你必须逃避点:

string.split("\\.");

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

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

如果目标是获得double的整数部分,你也可以简单地使用

long truncated = (long) doubleValue;

答案 1 :(得分:7)

split使用正则表达式作为参数,而正则表达式.表示“除行分隔符之外的任何字符”,因此您可以期望"a.bc".split(".")创建空字符串数组,如{{1} }。唯一原因是因为(来自["","","","",""] javadoc

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。 因此,结尾数组中不包含尾随空字符串

因为所有字符串都是空的,所以你得到空数组(这是因为你看到split)。

要关闭删除机制,您必须使用ArrayIndexOutOfBoundsException版本为负split(regex, limit)

要拆分limit字面值,您需要使用.(在Java中需要将其写为\.来转义它,因为"\\."也是字符串元字符)或{ {1}}或其他正则表达式机制。

答案 2 :(得分: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 .");
}